mysql - 添加索引优化MySQL查询

标签 mysql optimization indexing

我们有以下 MySQL 表,大约有 1.5 亿行:

CREATE TABLE `data` (
  `datetime` datetime NOT NULL,
  `value1` decimal(12,6) NOT NULL,
  `value2` decimal(12,6) NOT NULL,
  `value3` decimal(12,6) NOT NULL,
  `value4` decimal(12,6) NOT NULL,
  `value5` decimal(12,6) NOT NULL,
  `symbol_id` int(11) NOT NULL,
  PRIMARY KEY (`symbol_id`,`datetime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

1.5 亿行均匀分布在 9500 个符号之间,由 symbol_id 指定。

我正在尝试在表上运行以下查询:

SELECT datetime FROM data WHERE symbol_id = 1234 AND datetime <= "2013-03-01 15:00:00" ORDER BY datetime DESC LIMIT 1

对查询返回运行 EXPLAIN:

           id: 1
  select_type: SIMPLE
        table: data
         type: range
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 12
          ref: NULL
         rows: 23856
        Extra: Using where; Using index

查询平均需要大约 300 毫秒才能运行。我可以添加什么索引来加快速度?

谢谢!

最佳答案

正如戈登所暗示的那样,没有索引可以提高查询的性能。

这并不是说您无法采取任何措施来使其更快 - 调整您的 DBMS 和操作系统 I/O - 您没有提供有关其当前配置方式、运行方式以及使用模式的任何信息喜欢。如果您还没有开始这个过程,那么针对您的安装运行 mysqltuner.pl 将是一个好的开始 - 但它并不总是完全正确的。使用不同的引擎可能会提高此查询的性能 - 但这取决于系统上发生的其他一切。

通过将索引分片到多个磁盘和/或使用 SSD 进行索引存储,您将获得巨大 yield 。更多内存几乎总是有帮助的。

get a good book关于MySQL调优,花点时间阅读一下。

关于mysql - 添加索引优化MySQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180183/

相关文章:

MySQL 交易和双花

ios - 合成两个 CIImages 并在 UIImageView 问题中显示

c++ - 如何优化strtok + atoll

java - 如何在 lucene 中索引 pdf、ppt、xl 文件(基于 java 或 python 或 php 的任何一个都可以)?

mysql - 对表中数百万条记录进行分区或索引?

c++ - 构建成功时 Eclipse (CDT) 中的可疑错误消息

php - 如何使用 PHP 将用户随机映射到组中并保持组计数的平等

php - 使用一个 SQL 查询删除 postmeta 和 posts

Mysql 事件调度程序每月运行一次

postgresql - Postgres - 全表扫描太慢 - 未使用索引