可爲什麼MySQL是不是在下面的查詢MySQL索引的問題
SELECT `Slugs`.`slug` FROM `slugs` AS `Slugs`
WHERE `Slugs`.`country_id` = 1 AND `Slugs`.`expired` = 0
LIMIT 308400,300
我已經創造了在where子句
表結構所指向的兩列的cmposite指數使用正確的索引有人告訴我爲表slugs
CREATE TABLE IF NOT EXISTS `slugs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`slug` varchar(255) NOT NULL,
`post_fields` text NOT NULL,
`slugdata` text NOT NULL,
`updated_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`country_id` int(11) NOT NULL DEFAULT '1',
`expired` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `slug_2` (`slug`,`country_id`),
KEY `updated_date` (`updated_date`),
KEY `country_id` (`country_id`),
KEY `slug` (`slug`),
KEY `expired` (`expired`),
KEY `country_id_2` (`country_id`,`expired`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1612485 ;
指標:
Keyname Type Unique Packed Field Cardinality Collation Null Comment
PRIMARY BTREE Yes No id 1406994 A
slug_2 BTREE Yes No slug 1406994 A
country_id 1406994 A
updated_date BTREE No No updated_date 21 A
country_id BTREE No No country_id 21 A
slug BTREE No No slug 1406994 A
expired BTREE No No expired 21 A
country_id_2 BTREE No No country_id 21 A
expired 21 A
輸出解釋
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Slugs ref country_id,expired,country_id_2 country_id 4 const 670284 Using where
什麼是根據你的正確索引?你的索引也可能*基數很低,難怪MySQL檢查這麼多行。 – 2012-01-30 10:53:41