我爲了來加速搜索功能的產品,價格升序排序添加一個索引(IDX_D34A04AD46C53D4C41FA5CD2
)我product
表:MySQL使用WHERE + ORDER BY(索引的兩個部分)解釋不使用索引?
CREATE TABLE `product` (
`id` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
`unit_price` decimal(13,4) NOT NULL,
`stock_qty` int(11) DEFAULT NULL,
`is_enabled` tinyint(1) NOT NULL,
`min_sale_qty` int(11) DEFAULT NULL,
`max_sale_qty` int(11) DEFAULT NULL,
`package_qty` int(11) DEFAULT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`is_new` tinyint(1) NOT NULL,
`created_at` date NOT NULL,
`package_type` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_D34A04ADBF396750` (`id`),
KEY `IDX_D34A04AD41FA5CD2` (`unit_price`),
KEY `IDX_D34A04AD46C53D4C` (`is_enabled`),
KEY `IDX_D34A04AD46C53D4C41FA5CD2` (`is_enabled`,`unit_price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
搜索活躍的產品,按價格排序,顯示50項每頁:
EXPLAIN SELECT * FROM product WHERE is_enabled > 0 ORDER BY unit_price ASC LIMIT 0, 50;
輸出:
1 SIMPLE product index IDX_D34A04AD46C53D4C,IDX_D34A04AD46C53D4C41FA5CD2 IDX_D34A04AD41FA5CD2 6 100 Using where
你能簡單解釋一下我做錯了和W我不能在我的例子中實現「使用索引條件」?
EDIT:從MySQL文檔:
下列查詢使用該索引來解決ORDER BY部分:
SELECT * FROM T1 WHERE key_part1 =常數ORDER BY key_part2;
這看起來和我的例子完全一樣。
表中有多少行? –
@EricPetroelje現在〜9000 – gremo