MySQL索引之隔離列

如果在查詢中沒有隔離索引的列,mysql通常不會使用索引。隔離列意味著它不是表達式的一部分,也沒有位于函數中。 例如: mysqlselect id from test where id +1 =5; 我們能輕易地看出where子句中的id等4,但是mysql卻不會幫你求解方程,這取決于自己。我們應

如果在查詢中沒有隔離索引的列,mysql通常不會使用索引。“隔離“列意味著它不是表達式的一部分,也沒有位于函數中。

例如:

mysql>select id from test where id +1 =5;

我們能輕易地看出where子句中的id等4,但是mysql卻不會幫你求解方程,這取決于自己。我們應該養(yǎng)成簡化where子句的習慣,這樣就會把被索引的列單獨放在比較運算符的一邊。

再例如:

mysql>select … where TO_DAYS(CURRENT_DATE) – TO_DAYS(date_col)
這個查詢會查找date_cool值離今天不超過10天的所有行,但是它不會使用索引,因為使用了TO_DAYS()函數。

稍作修改:

mysql>select … where data_cool >= DATE_SUB(CURRENT_DATE,INTERVAL 10 DAY);

這個查詢就可以使用索引,但是它還可以改進。使用CURRENT_DATE將會阻止查詢緩存把結果緩存起來,可以用常量替換掉CURRENT_DATE的值:

mysql>select … where date_cool >= DATE_SUB(‘2012-08-29’,INTERVAL 10 DAY);

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享