猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase MySQL

MySQLのexists

投稿日:2013年1月27日 更新日:

exists自体はほとんどのSQL自体に実装されていると思われます。
しかし、使用方法を誤るとレスポンスに大きな影響を与えてしまします。

副問合せであるexists内部で、集問い合わせのキー列と結合していても、主問い合わせのキー参照にはならず、下手をすれば全検索になってしまうということです。

例えば、以下のようなSQLではtable1を全文検索してしまいます。

 
select count(*)
from table1
where
exists
(
 select *
 from table2
 and table2.id between 50 and 100
 and table2.id = table1.id
)

and table2.id = table1.idとしていても、table1は全文検索してしまうのです。
table1に100万行あったとしたら、想定外のレスポンス低下となるでしょう。

対応するには条件分にexists以外にtable1に対する条件が必用です。

 
select count(*)
from table1
where
exists
(
 select *
 from table2
 and table2.id between 50 and 100
 and table2.id = table1.id
)
and table1.id between 1 and 500

このような失敗を起こさないためにも、常にexplainを使用して、実行計画を確認することが大事です。

 
explain 
select count(*)
from table1
where
exists
(
 select *
 from table2
 and table2.id between 50 and 100
 and table2.id = table1.id
)
and table1.id between 1 and 500

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

mysql

MySQLのmysqldumpのエクスポートとインポート

ダンプはバックアップやテストに大活躍してくれます。 しかし、データベース単位でエクスポートしても、インポートには随分時間がかかったりします。 その辺は別の機会にしますが、今回は基本コマンドのまとめです …

mysql

MySQLのインポートエラー ERROR 1005 (HY000) (errno: 121)

ダンプをインポートする際にたまにるのがこのエラーです。 ERROR 1005 (HY000) at line 23: Can’t create table ‘./[スキーマ]/ …

MySQLの実行速度テスト用PHP

1.testデータベースにtest_tableテーブルを作成。 2.1万件のデータを登録します。 3.1000件のフラグを更新 4.更新したデータを検索する時刻を測定して表示 するサンプルです。 &l …

sqlserver

SQL Server Management Studio でテーブルが変更できない

私は以前はOracleをメインで使用し、そしてここ数年間はMySQLをメインで使用しています。SQL Serverは少しかじった程度といえるでしょう。 こんな私が選択したのはSQL Server Ma …

sqlserver

「.NET」と「ASP.NET」からのSQL Serverへのコネクションを確認する(2)

「.NET」と「ASP.NET」からの接続には大きな違いがあります。 それは普通の?(exe形式の)アプリケーションか、Webアプリケーションかです。 この違いはアプリの終了というタイミングに大きく影 …