【问题标题】:MySQL index barely speeding up simple queryMySQL索引几乎没有加速简单查询
【发布时间】:2013-11-11 05:42:35
【问题描述】:

我有这张表,其中包含大约 80,000,000 行。

CREATE TABLE `mytable` (
`date` date NOT NULL,
`parameters` mediumint(8) unsigned NOT NULL,
`num` tinyint(3) unsigned NOT NULL,
`val1` int(11) NOT NULL,
`val2` int(10) NOT NULL,
`active` tinyint(3) unsigned NOT NULL,
`ref` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ref`) USING BTREE,
KEY `parameters` (`parameters`)
) ENGINE=MyISAM AUTO_INCREMENT=79092001 DEFAULT CHARSET=latin1

它围绕 2 个主要列:“参数”和“日期”。 “参数”大约有 67,000 个可能的值 对于每个“参数”,大约有 1200 行,每行都有不同的日期。 所以对于每个日期,有 67,000 行。 1200 * 67,000 = 80,400,000。

表大小显示为 1.5GB,索引大小为 1.4GB。

现在,我想查询表以检索一个“参数”的所有行 (其实我想对每个参数都做,但这是一个好的开始)

SELECT val1 FROM mytable WHERE parameters=1;

第一次运行在 8 秒内给我结果 不同但接近的参数值(2、3、4...)的后续运行是瞬时的

运行“遥远”值(参数=1000)再次在 8 秒内给我结果。

我在没有索引的情况下运行相同的查询进行了测试,并在 20 秒内得到了结果,所以我猜索引正在启动,如 EXPLAIN 所示,但性能并没有显着提升:

+----+-------------+----------+------+---------------+------------+---------+-------+------+-------+
| id | select_type | table    | type | possible_keys | key        | key_len | ref   | rows | Extra |
+----+-------------+----------+------+---------------+------------+---------+-------+------+-------+
|  1 | SIMPLE      | mytable  | ref  | parameters    | parameters | 3       | const | 1097 |       |
+----+-------------+----------+------+---------------+------------+---------+-------+------+-------+

但我仍然对如此简单的请求(不加入,直接在索引上)的时间感到困惑。

服务器是 2 年前运行 Ubuntu 的 2 cpu 四核 2.6GHz,具有 4G 内存。 我已经将key_buffer参数提高到1G,并重启了mysql,但没有发现任何变化。

我应该认为这是正常的吗?还是我做错了什么?我觉得正确的配置应该几乎是立即的请求。

【问题讨论】:

  • 它可能正在从磁盘读取。检查操作系统 io 统计信息。
  • 是的,它似乎正在从磁盘读取,即使它说它正在使用索引。我怎样才能确保它确实使用索引而不是去磁盘?
  • 它正在使用索引,但之后,它必须从磁盘中读取记录。假设您没有足够的内存,可能就是这种情况。调整配置可能会有所帮助...
  • 我应该简单地将 key_buffer 参数提高到超过索引的大小吗?还是超过表和索引大小的总和?另一个要考虑的配置参数?
  • 尝试使用pack_keys=1 在内存中拥有更大的索引部分。

标签: mysql sql performance ubuntu


【解决方案1】:

尝试使用覆盖索引,即创建一个包含您需要的两列的索引。它不需要第二个磁盘 I/O 来从主表中获取值,因为数据就在索引中。

【讨论】:

  • 我实际上需要超过 2 列,不要认为我应该创建 6 列索引!
猜你喜欢
  • 2023-03-10
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多