0
這裏是我的查詢:爲什麼我的查詢不使用任何索引?
select u.*,
concat(user_fname, ' ', user_lname) like concat(?, '%') `both`,
user_lname like ? last_name
from users u
where concat(user_fname, ' ', user_lname) like concat(?, '%')
or user_lname like concat(?, '%')
order by `both`*2 DESC, last_name
而且我有兩個指標:users(user_fname,user_lname)
,users(user_lname)
。
這裏是EXPLAIN
結果:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | u | ALL | user_lname | NULL | NULL | NULL | 9 | Using where
看到了嗎?它不使用任何索引。爲什麼?以及如何使查詢最佳?
您正在使用函數的結果。索引(如果有的話)是基於列值而不是函數的結果。 – Hogan
這個'concat(user_fname,',user_lname)like concat(?,'%')' –
要了解更多關於索引檢查的知識:MySQL index [** TIPS **](http://mysql.rjweb.org/ doc.php/index_cookbook_mysql)這個網站http://use-the-index-luke.com/和這個視頻.https://www.youtube.com/watch?v = ELR7-RdU9XU&index = 53&list = WL –