参考以下查询。第一个查询运行速度非常慢,即使逻辑与第二个查询相同。表table01和table02各有约15000条记录。那么问题到底是什么?我已经筋疲力尽了。
-- 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 :(得分:0)
您在if子句中生成的名称列上可能包含的任何索引将无法在第一个示例中使用。
一般情况下,使用mysql在任何函数中包装列名都会否定列上的索引优点