MySql查詢優化器如何處理以下查詢?MySql數據庫查詢優化器和類似關鍵字
Select * from Eomlpyees e where e.department_id = 100 and e.name like '%%';
Select * from Eomlpyees e where e.department_id = 100;
第一個查詢是一個hibernate命名查詢。我正在引入另一個不需要使用'name'過濾器的API。
我應該使用第一個查詢,通過傳遞空的「名稱」過濾器或添加第二個命名查詢。
2個查詢不是嚴格等價的。像'%%'這樣的e.name不會匹配具有'NULL'的'e.name'的行。 – 2012-04-17 13:32:12
有趣的是,如果沒有僱員與空值? – 2012-04-17 13:35:34
無論如何,我會使用第二個版本 - 即使「e.name」有NOT NULL約束。爲什麼依靠優化器?這很聰明,但這個特殊的技巧可能不在智能工具集中。作爲@aF。建議,你總是可以用'EXPLAIN'來檢查你的版本的行爲。 – 2012-04-17 13:38:51