2012-03-29 68 views
1

我有一個包含〜40k行樣本集的表,每行包含一個點(經度和緯度)。我使用MySQL的空間擴展來查找邊界內存在哪些點。MySQL不使用可能的索引 - 爲什麼?

如果我在一個我知道的邊界內搜索的結果很少,那麼該索引就會被使用。但是,我的測試數據集主要由英國各地的位置組成(並且較大的實時數據集可能在百分比方面相似)。當我這個邊界框進行搜索,索引不習慣,而是執行全表掃描:

id select_type  table type possible_keys  key key_len  ref  rows Extra 
1 SIMPLE   ep  ALL  PRIMARY,location NULL NULL  NULL 37221 Using where 

所以它好像MySQL是決定何時行數,預計忽略指數發現接近總行數。

是這種情況,如果是這樣,我可以強制使用索引或以其他方式確保避免全表掃描嗎?

+1

發佈您的查詢。有可能的是你會得到很多結果。在這種情況下,避免遍歷索引以返回大量結果,因爲它不是必需的。 – 2012-03-29 11:55:11

+0

另外,如果你可以發佈'table_structure'也不錯。 – 2012-03-29 12:15:31

回答

0

N.B是正確的,只需向下調整LIMIT意味着使用索引。真的很明顯。

+0

不要被LIMIT子句欺騙,它並不意味着使用任何東西。 LIMIT OFFSET將獲取結果,然後丟棄OFFSET數量的項目。如果您使用的是MyISAM表格,谷歌搜索「後期查詢」並相應地調整您的查詢。 – 2012-03-29 12:25:36