EXPLAIN SELECT *
FROM (
`phppos_items`
)
WHERE (
name LIKE 'AB10LA2%'
OR item_number LIKE 'AB10LA2%'
OR category LIKE 'AB10LA2%'
)
AND deleted =0
ORDER BY `name` ASC
LIMIT 16
+----+-------------+--------------+-------+-----------------------------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+-----------------------------------+------+---------+------+------+-------------+
| 1 | SIMPLE | phppos_items | index | item_number,name,category,deleted | name | 257 | NULL | 32 | Using where |
+----+-------------+--------------+-------+-----------------------------------+------+---------+------+------+-------------+
該查詢需要9秒才能運行(該表有100萬行+)。我是否需要有一個多列索引?
我有一個item_number,名稱,類別的索引,單獨刪除。我怎樣才能加快這個查詢?
不錯...應該檢查三次排列這個巨大的表格實際上是一個好主意...雖然...可能工作... – 2011-05-30 15:37:49
如果MySQL執行此操作對,它會在應用聯合之前排序每個子集。相比之下,你的建議將需要對每個字段的每個子集進行排序(因爲'union'子句將需要去除唯一字符串)。換句話說,排序以任何一種方式發生;這個版本會在訂購之前取得前n行。 – 2011-05-30 15:41:57
你可能是對的。這大概是最好的解決方案。這是一個非常好的主意,+1 – 2011-05-30 15:44:45