我有一个定义如下的表:
| book | CREATE TABLE `book` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`provider_id` int(10) unsigned DEFAULT '0',
`source_id` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
`title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` longtext COLLATE utf8_unicode_ci,
PRIMARY KEY (`id`),
UNIQUE KEY `provider` (`provider_id`,`source_id`),
KEY `idx_source_id` (`source_id`),
) ENGINE=InnoDB AUTO_INCREMENT=1605425 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
当使用以下 sql 有大约 10 个并发读取时:
SELECT * FROM `book` WHERE (provider_id = '1' AND source_id = '1037122800') ORDER BY `book`.`id` ASC LIMIT 1
它变慢了,大约需要 100 毫秒。
但是,如果我将其更改为
SELECT * FROM `book` WHERE (provider_id = '1' AND source_id = '221630001') LIMIT 1
然后是正常的,需要几个毫秒。
我不明白为什么按 id 添加订单会使查询慢得多?谁能解释一下?