mysql:15219
From: Hiroshi Hashibata <Hiroshi Hashibata <hashibata@xxxxxxxxxx>>
Date: Thu, 25 Mar 2010 11:05:22 +0900
Subject: [mysql 15219] レコードの存在チェック
橋端と申します。 InnoDBのテーブルにレコードが存在するかを 確認する方法について質問させていただきます。 これまでは #1 SELECT COUNT(*) FROM tableA WHERE id = xxxx;(xxxxは指定したID) としてプログラムに返った値に件数があるか0かで判断してきました。 しかし先日の案件で上のコードは 上位のプログラマによって下記のコードに直されました。 #2 SELECT id FROM tableA WHERE id = xxxx; 返されたResult[0]のidに値が入っているか空かで判断。 変更理由を聞いたところ ・tableAは頻繁に更新されるため#1のクエリーがたくさんプロセステーブルに残っている時がある ・MySQLはよく分からないが、前のオラクル案件では*はNGだった ・tableAの更新頻度は変えられないため、苦肉の策 ということでした。 そこで疑問に思ったのですが2点あります。 (1)#1はWHEREで該当するIDのレコードを選び出し、COUNTでその件数を数えるというクエリですよね。 *からカラム名に変えることでMySQLの動作はどう変わりますか? (2)InnoDBは行レベルロックなのでtableAの更新中に#1のレコードが止まるということは 同じレコードの更新/読み込みが発生しているからでは?だとしたら#2も同じではないか。 既に#2に変更はしたのですが 自分の疑問を晴らすために 皆様のお返事をお待ちしています。
-> 15219 2010-03-25 11:05 [Hiroshi Hashibata <h] レコードの存在チェック 15220 2010-03-25 11:53 ┗[<sydney@xxxxxxxxxx> ] 15221 2010-03-25 12:15 ┗[Hiroshi Hashibata <h] 15222 2010-03-25 12:25 ┣[Mikiya Okuno <Mikiya] 15223 2010-03-25 12:26 ┣[Akio Imai <suzuro204] Re: [mysql 15221] Re: レコードの存在チェック 15224 2010-03-25 13:09 ┃┣[Mikiya Okuno <Mikiya] Re: レコードの存在チェック 15226 2010-03-25 13:20 ┃┗[宮田 昌紀 <moyata@xx] Re: レコードの存在チェック 15227 2010-03-25 14:39 ┃ ┗[Akio Imai <suzuro204] Re: [mysql 15226] Re: レコードの存在チェック 15228 2010-03-25 17:02 ┃ ┗["Tadayuki Abraham HA] MySQLの公共システムへの利用率について 15225 2010-03-25 13:12 ┗["EBIHARA, Yuichiro" ]