当我尝试使用where和order获取一些mysql数据时,我遇到了一些问题。
即使我在哪里使用或只是订购,订单也不使用表索引。
我有这张桌子
CREATE TABLE IF NOT EXISTS `myTable`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`price` mediumint(9) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `title` (`title`),
KEY `price` (`price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11 ;
我有这个插入的行,它们是演示行,它可能达到10.000
的行数INSERT INTO `myTable` (`id`, `title`, `price`)
VALUES
(1, 'pede. Praesent eu dui. Cum', 552),
(2, 'lobortis tellus justo sit amet', 663),
(3, 'Nulla tempor augue ac ipsum.', 87),
(4, 'Ut sagittis lobortis mauris. Suspendisse', 653),
(5, 'orci luctus et ultrices posuere', 88),
(6, 'In at pede. Cras vulputate', 474),
(7, 'erat eget ipsum. Suspendisse sagittis.', 686),
(8, 'magna nec quam. Curabitur vel', 999),
(9, 'felis eget varius ultrices, mauris', 23),
(10, 'ut, pharetra sed, hendrerit a,', 943);
以下是我的查询
Explain SELECT id,title,price FROM `myTable` order by price
没有使用任何索引,正在使用filesort。
Explain SELECT price FROM `myTable` order by price
使用价格指数,但我需要获取所有数据,而不仅仅是价格。
答案 0 :(得分:1)
创建覆盖索引
CREATE INDEX `idx_price_title` ON myTable(price,title);
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
现在查看explain
计划,它正在使用正确的索引
Explain SELECT id,title,price FROM `myTable` order by price;
+----+-------------+---------+-------+---------------+-----------------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+-----------------+---------+------+------+-------------+
| 1 | SIMPLE | myTable | index | NULL | idx_price_title | 772 | NULL | 10 | Using index |
+----+-------------+---------+-------+---------------+-----------------+---------+------+------+-------------+
1 row in set (0.00 sec)