[前][次][番号順一覧][スレッド一覧]

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" ]