首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

求教基于索引的排序的机制,该怎么解决

2012-05-15 
求教基于索引的排序的机制CREATE TABLE `t6` (`x` char(20) DEFAULT NULL,`y` char(20) DEFAULT NULL,`z`

求教基于索引的排序的机制
CREATE TABLE `t6` (
`x` char(20) DEFAULT NULL,
`y` char(20) DEFAULT NULL,
`z` char(20) DEFAULT NULL,
KEY `bt` (`x`,`y`,`z`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

x,y,z复合索引
=================================================================
describe select * from t6 where x='dfds' and z='fdsfd'

输出(可以看出使用了覆盖索引)


1SIMPLEt6refbtbt61const1Using where; Using index

==================================================================

但下列语句缺提示使用了文件排序

describe select * from t6 order by x asc, z asc

输出

1SIMPLEt6indexbt1832Using index; Using filesort


===================================================================

虽然书上说的也是这样的结果, 但是感觉有点理解不起啊

x, 和 z的值在索引中都可以获得 为什么出现文件排序的情况呢




[解决办法]
select * from t6 where x='dfds' and z='fdsfd'

这个是直接取数据,对结果输出没有排序要求。所以,MYSQL可以直接使用索引 找到 x='dfds' 的所有记录,并利用索引中的 Z进行 WHERE判断。

select * from t6 order by x asc, z asc
这个取所有记录,然后要按X,Z排序。按X排序可以利用索引,但Z则无法使用索引了,而且是取全部记录,这样当然直接去原表中取记录然后排序更为有效。

热点排行