【发布时间】:2023-04-09 14:17:01
【问题描述】:
我有一个非常简单的两列表格,但有 450 万行。
CREATE TABLE `content_link` (
`category_id` mediumint(8) unsigned NOT NULL,
`content_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`content_id`,`category_id`),
KEY `content_id` (`content_id`,`category_id`)
) ENGINE=MyISAM;
当我运行一个简单的查询时:
SELECT
*
FROM
content_link
WHERE
category_id = '11';
mysql 在返回大约 10 行之前会占用 CPU 并需要 2-5 秒。数据非常均匀地分布在表中,并且我正在访问索引字段(我还分析/优化了表,我从未更改表的内容),那么查询需要这么长时间的原因是什么?
编辑:navicat 似乎在对我撒谎,而我的主键实际上并没有按正确的顺序键入,因为它正在向我显示表格。
【问题讨论】:
-
均匀分布是什么意思?结果正确吗?您是否对 I/O 进行了概要分析?是否存在硬件延迟?
-
均匀分布是指我没有将 ID 聚集在一起,因此 mysql BTREE 索引应该没有任何问题。
标签: sql mysql performance myisam