指數

2013-04-15 28 views
1

你好,我有這個疑問指數

SELECT * FROM customers WHERE height > 180 AND height < 200 

,這裏是適用於它的explain結果:

mysql> explain SELECT * FROM customers WHERE height > 180 AND height < 200; 
+----+-------------+-----------+------+---------------+------+---------+------+-------+-------------+ 
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra  | 
+----+-------------+-----------+------+---------------+------+---------+------+-------+-------------+ 
| 1 | SIMPLE  | customers | ALL | height  | NULL | NULL | NULL | 10423 | Using where | 
+----+-------------+-----------+------+---------------+------+---------+------+-------+-------------+ 

注意這裏是字段height一個指數,沒有被拿起,不知何故...

height字段是一個整數。我不知道。我期待它被使用,並且type成爲range

任何人?

+1

您能否包含高度指數的定義? –

+1

向我們展示了實際的客戶結構表。 –

+0

桌子上有多少記錄落在該高度範圍內? – Kickstart

回答

0

問題在於指定的範圍。顯然太鬆了。 Mysql更喜歡全面掃描,而不是在這種特殊情況下使用索引。如果我限制範圍,或者增加記錄數量,則使用height索引,搜索訪問策略根據手冊變爲range

+0

MySQL選擇進行全表掃描之前的子集的大小似乎有所不同。出於興趣大致,你的記錄有多少百分比落入該範圍?可惜有人刪除了其他答案。 – Kickstart