mysql - 索引显示速度没有提高

标签 mysql performance indexing

我有一个包含属性数据的大约 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/

相关文章:

android - 从SD卡读取并插入SQL表非常慢

indexing - Lucene IndexWriter.Close() 与 indexWriter.Commit()

mysql - 在一张表中添加第二个外键 - MySql

JavaScript:针对特定类型的鞋子过滤鞋子对象数组并返回具有索引作为属性的对象数组

MySQL Rails REGEXP 不能使用反斜杠

MySql 仅使用单个选择查询更新表

performance - 删除 chrome devTools 中的内存缓存

sql-server - SQL Server 性能 : 50 columns vs single binary/varbinary

mysql utf8_unicode_ci 问题。出现奇怪的字符 ¿

c++ - 不能包含 mysql