使 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 查询更快,或提出替代方案的主要内容,如果未能解决你的问题,请参考以下文章