【问题标题】:Make mysql queries faster, or suggest alternatives使 mysql 查询更快,或提出替代方案
【发布时间】: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 有重复的值,不能是独一无二的,我不知道如何索引它们

标签: mysql database performance database-performance query-performance


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2020-06-30
  • 2020-05-06
  • 2016-12-13
  • 2018-12-11
  • 2012-07-05
相关资源
最近更新 更多