我有一个表OrderDish,它包含:
create table OrderDish(
email VARCHAR(80),
nOrd integer,
totalPrice integer,
sale integer,
nameR VARCHAR(80),
dayO integer,
monthO VARCHAR(45),
yearO integer,
constraint c5 primary key (email, nOrd),
foreign key (email) references Client(email),
foreign key (nameR) references Restaurant(nameR),
foreign key (dayO, monthO, yearO) references Data(dayO, monthO, yearO));我有一个非常常见的问题,要求按餐厅和年份销售totalPrice。
select O.nameR, O.yearO, sum(O.totalPrice) as mytotal
from OrderDish O
group by O.nameR, O.yearO;研究结果如下:
+------------------------------+------+------------+
| nameR | yeaO | mytotal |
+------------------------------+------+------------+
| El Gordo | 2013 | 5699 |
| El Gordo | 2014 | 2793 |
| El Gordo | 2015 | 11457 |
| Eleven | 2013 | 7599 |
| Eleven | 2014 | 3724 |
........我想创建一些索引来加速这个非常常见的查询。我已经做了这么多了
create INDEX tot_per_rest_per_year
ON OrderDish(nameR) using btree;但这并没有加速--消耗的时间是一样的。
发布于 2013-12-10 00:40:35
我想下面的指数可以帮你。
ALTER TABLE OrderDish ADD INDEX(nameR, yearO, totalPrice);您正在进行完全扫描,即使有INDEX(nameR)。
请参阅http://dev.mysql.com/doc/refman/5.5/en/group-by-optimization.html
假设表t1(c1、c2、c3、c4)上有索引idx(c1、c2、c3)。松散索引扫描访问方法可用于以下查询: 选择c1,c2从t1组中选择c1,c2;从t1中选择c1,c2;从c1组中选择c1,MIN( c2 );从t1中选择c1,c2,c1 < const组BY c1,c2;从,MIN(),,从选择> const组,其中,;从选择,其中< const组按,;从,从#en35,#en36选择= const组。
和,
“我只知道mysql中的btree”
MySQL只支持B树索引(仅支持散列索引的内存表除外).
https://stackoverflow.com/questions/20483576
复制相似问题