Tôi có một câu hỏi rất đơn giản:truy vấn MySql đơn giản của tôi không sử dụng chỉ mục
SELECT comments.*
FROM comments
WHERE comments.imageid=46
Và đây là bàn của tôi:
CREATE TABLE IF NOT EXISTS `comments` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`imageid` int(10) unsigned NOT NULL DEFAULT '0',
`uid` bigint(20) unsigned NOT NULL DEFAULT '0',
`content` text CHARACTER SET utf8,
`adate` datetime DEFAULT NULL,
`ip` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ids` (`imageid`) USING BTREE,
KEY `dt` (`adate`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
Nhưng MySql không thể sử dụng chỉ mục trên truy vấn đơn giản này . đây là kết quả giải thích:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE comments ALL ids NULL NULL NULL 4 75.00 Using where
trong khi tôi thay đổi truy vấn này, Mysql có thể sử dụng chỉ mục. Tại sao? :
SELECT comments.id
FROM comments
WHERE comments.imageid=46
đây là giải thích:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE comments ref ids ids 4 const 4 100.00 Using index
Nó không * "Nhưng MySql ** không thể sử dụng chỉ mục" *. Đó là: "Nhưng MySql ** sẽ không ** sử dụng chỉ mục". 'Possible_keys = ids' và' key = NULL' gợi ý rằng việc sử dụng chỉ mục đã được trình tối ưu hóa kiểm tra và bị từ chối. Quét toàn bộ bảng được cho là nhanh hơn - và có thể trong trường hợp của bạn. –