使 mysql 查询更快,或提出替代方案

Posted

技术标签:

【中文标题】使 mysql 查询更快,或提出替代方案【英文标题】:Make mysql queries faster, or suggest alternatives 【发布时间】:2014-07-08 13:40:10 【问题描述】:

大家好,我有一个包含超过 25 万条记录的大型数据库, 数据库是mysql,现在我用navicat来管理它

但是查询需要很长时间才能检索到一个简单的结果集,例如:

select count(my_column)
from my_table
where my_other_column = 123456

我真的不能让这个查询花那么长时间,我需要一个 mysql 的替代品,或者某种方式来优化它以使其更快

目前表是mysam,不知道是不是问题,如果是,我该如何修改它们?

【问题讨论】:

它看起来很简单,但没有索引性能会很差。您能否将explain select count(my_column) from my_table where my_other_column = 123456 的结果发布到问题中? 确保 my_other_column 已编入索引。 my_other_column 是其他表的索引,所以我不能只设置为自动递增或类似的东西,我需要保持原来的值,我的意思是,这个 my_other_column 有重复的值,不能是独一无二的,我不知道如何索引它们 【参考方案1】:

对于这个查询:

select count(my_column)
from my_table
where my_other_column = 123456

您希望在my_table(my_other_column, my_column) 上建立索引。请注意,这是一个复合索引,与拥有两个单独的索引不同。您可以使用以下方法创建它:

create index idx_mytable_other_my on mytable(my_other_column, my_column)

这种类型的索引称为查询的“覆盖索引”。不需要原始数据页,因为查询所需的所有数据都在索引中。

【讨论】:

OH MY GOD,你介意解释一下这个操作背后的概念吗?像魅力一样工作!!!!!! @PauloJoséOliveiraRosa 。 . .索引是一种加快查询速度的方法。您可以通过查看文档开始了解它们:dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html

以上是关于使 mysql 查询更快,或提出替代方案的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中 MIN/MAX 的更快替代方案

mysql 查询连接和速度/替代数据库解决方案有必要吗?

push_back 的更快替代方案(已知大小)

MySQL连接组件MyDAC官方使用教程分享

在 MATLAB 中保存图像的更快替代方案? [复制]

性能缓慢的 MySql 查询,替代方案/建议?