【问题标题】:MySQL not using possible index - why?MySQL 不使用可能的索引 - 为什么?
【发布时间】:2012-03-29 11:51:04
【问题描述】:

我有一个包含约 40k 行样本集的表,每行包含一个点(经度和纬度)。我正在使用 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 期望找到的行数接近总行数时,它似乎决定忽略索引。

是这样吗?如果是这样,我可以强制使用索引或以其他方式确保避免全表扫描吗?

【问题讨论】:

  • 发布您的查询。很可能你会得到很多结果。在这种情况下,避免遍历索引以返回大量结果,因为它不是必需的。
  • 如果你能发帖table_structure也很好。

标签: mysql optimization indexing spatial-index


【解决方案1】:

NB 是正确的,简单地向下调整 LIMIT 意味着使用了索引。确实很明显。

【讨论】:

  • 不要被 LIMIT 子句所迷惑,它并不意味着使用了任何东西。 LIMIT OFFSET 将获取结果,然后丢弃 OFFSET 项目数。如果您使用的是 MyISAM 表,请在 Google 上搜索“后期行查找”并相应地调整您的查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2014-03-18
  • 1970-01-01
  • 2013-10-29
  • 2016-06-24
  • 1970-01-01
  • 2015-03-27
相关资源
最近更新 更多