2012-02-22 12 views
0

以下のクエリを参照してください。ロジックが2番目のクエリと同じであっても、1番目のクエリは非常に遅く実行されます。テーブルtable01とtable02にはそれぞれ約15000レコードがあります。それでは、まさにここの問題は何ですか?私はすでにアイディアを使い果たした。WHERE IF条件付きのMySQLの非常に遅いクエリ

-- 1st. Very slow 
hardcoded here for easier reference 
SELECT a.eventid, d.fileno 
FROM table01 a LEFT JOIN table02 d ON a.eventid=d.eventid 
WHERE IF('fileno'='fileno',d.fileno = 'FIL123',0=0) 
-- original: WHERE IF(search_field='fileno',d.fileno = 'BC12449',0=0) 
-- search_field is passsed from stored procedure 

-- 2nd. Fast 
SELECT a.eventid, d.fileno 
FROM table01 a LEFT JOIN table02 d ON a.eventid=d.eventid 
WHERE d.fileno = 'FIL123' 

答えて

0

if節内で生成する名前の列にあるインデックスは、最初の例では使用できません。 MySQLで任意の関数内の列名をwraping一般に

は、列にインデックスbenifitsを否定します