我有超过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在控制台中检查状态时,运行查询的状态卡在:发送数据,此状态占用所有时间