MySql - 排序大表性能问题

时间:2017-07-23 21:41:16

标签: php mysql

我有超过10M行的大表,InnoDB。

当我在查询中使用 ORDER BY 时需要15秒(没有ORDER BY 0.008s)。

SELECT product_id, name, manufacturer_id FROM items 
WHERE manufacturer_id = 704 ORDER BY name ASC LIMIT 0, 48

我有简单的索引:product_id,name,manufacturer_id
我有多列索引:manufacturer_id和名称

所以我不会使用任何JOIN或其他减速技术。只有一个条件,按一列排序。

您有什么提示可以加快我的查询速度吗? 我读到有关“在Mysql中分区”这个很好,当我有超过1,000个制造商,我需要每个制造商搜索但是有些时候我需要用桌子作为“一件”吗?

使用EXPLAIN查询 id:1
select_type:SIMPLE
表:项目
类型:索引
possible_keys:manufacturer_id
键:名称
key_len:767
ref:NULL
行:15168
额外:使用

的地方

show create table: 表:项目
创建表:

CREATE TABLE `items` (
 `product_id` int(11) NOT NULL AUTO_INCREMENT,
 `product_no` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
 `name` varchar(255) CHARACTER SET utf8 NOT NULL,
 `url` varchar(255) CHARACTER SET utf8 NOT NULL,
 `price` decimal(9,2) DEFAULT NULL,
 `manufacturer_id` int(11) NOT NULL,
 PRIMARY KEY (`product_id`),
 KEY `name` (`name`),
 KEY `name_2` (`name`,`manufacturer_id`),
 KEY `manufacturer_id` (`manufacturer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=27100137 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

更新: 我尝试将innodb_buffer_pool_size从5MB更改为2G,这似乎有所帮助。

当我使用SHOW FULL PROCESSLIST在控制台中检查状态时,运行查询的状态卡在:发送数据,此状态占用所有时间

0 个答案:

没有答案