有字段A,B
其中字段A是主键排序规则是B从大到小,A从小到大
编写语句:
select A from tablename order by B desc, A limit XX;建立联合索引,B为第一项,A为第二项。这个时候还是会进行重新排序。
该如何建这个索引才能让它不重新排序直接使用索引呢?
其中字段A是主键排序规则是B从大到小,A从小到大
编写语句:
select A from tablename order by B desc, A limit XX;建立联合索引,B为第一项,A为第二项。这个时候还是会进行重新排序。
该如何建这个索引才能让它不重新排序直接使用索引呢?
如果A和B的升降序是一致的话,是不会重排的。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
'A' INT NOT NULL,
'B' INT NOT NULL,
PRIMARY KEY('A'),
INDEX 'testindex' ('B','A')排序:
explain select A from test order by B desc, A
Using index; Using filesort现在我不希望出现Using filesort
有没有办法解决呢?尝试设置B的索引为降序
ALTER TABLE 'test'
DROP INDEX 'testindex'
,ADD INDEX 'testindex' ('B' DESC, 'A' ASC);执行时显示成功,但查看后发现没有改变任何东西版本是mysql 5.1
insert into test values (1, 2)
insert into test values (2, 2)
insert into test values (3, 1)
insert into test values (4, 3)
explain select A from test order by B desc, A
Using index; Using filesort现在我不希望出现Using filesort
有没有办法解决呢?
就是使用排序时数据库还是会重排一次,我希望mysql不重排一次,提高效率。实际数据量可能会很大。