索引的问题

[复制链接]
查看11 | 回复9 | 2009-10-9 08:28:00 | 显示全部楼层 |阅读模式
一张表一万条数据,主码为id,date,name,作了两个索引,A索引包括了字段id,date,name,B索引只包括了字段name,运行下面的查询语句:
select * from table order by id,date,name和select * from table order by name,第一个语句非常快,但是第二个非常慢,不知道什么原因?
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
帮顶!
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
select * from table order by name
估计没有用索引B,加hint看看
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
贴出计划
既然是主码 还为什么建什么索引呢?
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
原帖由 boysunsight 于 2007-12-25 09:22 发表
一张表一万条数据,主码为id,date,name,作了两个索引,A索引包括了字段id,date,name,B索引只包括了字段name,运行下面的查询语句:
select * from table order by id,date,name和select * from table order by name,第一个语句非常快,但是第二个非常慢,不知道什么原因?

id primary key
(id,date, name) 联合索引
name 索引
第一句快, 估计用到主键上的索引了
第二句慢, 估计什么索引都没有用到
去看看这两句的执行计划吧


回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
原帖由 boysunsight 于 2007-12-25 09:22 发表
一张表一万条数据,主码为id,date,name,作了两个索引,A索引包括了字段id,date,name,B索引只包括了字段name,运行下面的查询语句:
select * from table order by id,date,name和select * from table order by name,第一个语句非常快,但是第二个非常慢,不知道什么原因?

第一句快,你是看完了所有的记录,还是只是出来前面的几条?
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
试了一下,并在网上找了一下资料
用WHERE 替代ORDER BY ORDER BY 子句只在两种严格的条件下使用索引. ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空. WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
估计name列的索引根本没有使用上,看看是否name的重复度比较高?
数据库使用的是CBO还是RBO?
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
SQL>set autotrace on explain
[ 本帖最后由 stronghearted 于 2007-12-25 23:13 编辑 ]
回复

使用道具 举报

千问 | 2009-10-9 08:28:00 | 显示全部楼层
原帖由 阿日 于 2007-12-25 17:17 发表
试了一下,并在网上找了一下资料
用WHERE 替代ORDER BY ORDER BY 子句只在两种严格的条件下使用索引. ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空. WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列

这个应该是正解,写在where条件里看看执行计划有什么不同就知道答案了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行