我有一个包含属性数据的大约 2200 万行和大约 20 列的表。当前查询如下:
SELECT * FROM fulldataset WHERE county = 'MIDDLESBROUGH'
运行平均需要 42 秒。为了尝试改进这一点,我在县列上创建了一个索引,如下所示:
ALTER TABLE fulldataset ADD INDEX county (county)
同样的查询速度没有任何提升。
所以我使用 EXPLAIN SELECT 来尝试找出发生了什么。如果我从 countyA 中选择 *,它会在大约 42 秒后返回大约 85k 个条目。如果我解释选择相同的查询,它说它正在使用我创建的县索引并且行数约为 167k,这是错误的但比搜索所有 2200 万要好。
同样,如果我为 countyB 选择 *,我得到大约 48k 个结果,EXPLAIN SELECT 告诉我大约有 91k 行。 EXPLAIN SELECT 语句立即返回结果,因此它能够立即判断出 countyB 的条目数大约是 countyA 的一半。问题是查询不会执行得更快。如果它只检查 91k 行不是应该很快吗?
这是我正在做的事情的截图:image
编辑:正如所指出的,查询本身并不需要时间。在回答我自己在评论中提出的问题时,多列索引产生了奇迹。
最佳答案
查询不是问题。如果仔细查看程序的输出,您会发现查询执行时间不到 1 秒,但获取所有行花费了 42 秒。
如果您必须等待 42 秒才能看到任何内容,那么我建议使用另一种查询工具,它只获取前 X 行并将它们显示在页面中。
关于mysql - 索引显示速度没有提高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42927183/