先月から久しぶりにサイトの更新作業を再開して、WordPress、各種プラグイン、MySQL、PHPなどの最新化やPageSpeed Insightsの対応などをコツコツ進めてたらGoogleから以下のようなメッセージが届いてました。最近更新サボってたし、何故今?と思ってたら
「このメールは、Google Search Console にサイトが登録されている方を対象に送信されています。」
とのことでしたw。
更新作業でGoogle Search Consoleにも登録してたのが原因かあとか思いつつもメッセージ自体は結構嬉しかったです(*^^*)
IN句をEXISTS句へ変換するとパフォーマンスが向上すると言われることがあるので
IN句からEXISTS句への変換例をメモしておきます。
サンプルテーブル
以下の商品テーブル「goods」と属性コードテーブル「type_code」を元に説明します。
商品テーブル「goods」 | 属性コードテーブル「type_code」 |
| |
IN句を使用したSQL例
商品テーブル「goods」のtype_codeが ‘101’で属性コードテーブル「type_code」にも存在する商品名を取得する例となります。
|
SELECT tc.code_name FROM type_code AS tc WHERE tc.code IN(SELECT type_code FROM goods WHERE type_code = '101'); |
EXISTS句を使用したSQL例
WHERE句後の「tc.code IN」を「EXISTS」に変更し、「AND type_code = tc.code」を追加しただけです。
|
SELECT tc.code_name FROM type_code AS tc WHERE EXISTS (SELECT 1 FROM goods WHERE type_code = '101' AND type_code = tc.code); |
出力結果(IN句、EXISTS句)
IN句、EXISTS句どちらの場合も以下の結果となります。
NOT EXISTS句を使用したSQL例
EXISTS句は使い慣れてないと今一つ分かりにくい気がするので、上記のEXISTSをNOT EXISTSで実行してみた例も記載しておきます。なんとなくEXISTSがどういう結果を出力しているかわかるかも。。
|
SELECT tc.code_name FROM type_code AS tc WHERE NOT EXISTS(SELECT 1 FROM goods WHERE type_code = '101' AND type_code = tc.code); |
出力結果(NOT EXISTS句)
NOT EXISTS句の結果は以下となります。
SQLで指定した件数のみ取得する場合、MySQLやPostgreSQLではLIMIT句を使用します。
OracleではLIMIT句は使用できないのでROWNUMを使用します。
使用例
「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。