2010年3月25日

[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に変更はしたのですが
自分の疑問を晴らすために
皆様のお返事をお待ちしています。


投稿者 xml-rpc : 2010年3月25日 11:05
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/94484
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。