在SQL2k降序索引上使用中bug

解决SQL2k降序索引上使用对比条件更新或删除的bug我在SQL server 2000 enterprise 和 personal 都试过了, 每次都这样。:(
详细情况看我的回贴:
SQl server 7.0 中的确没有问题, sql 2000 中(enterprise 和 personal版本都可以),
表要有聚簇索引,并且索引的顺序是降序,
例如 按下列DDL sql 建立的表
CREATE TABLE [AType] (
[AID] [int] NOT NULL ,
[name] [varchar(20)] NOT NULL ,
CONSTRAINT [PK_DateType] PRIMARY KEY CLUSTERED
([AID] DESC) ON [PRIMARY] ,
) ON [PRIMARY]
添一些数据后, AID 分别分布在1-100之间
INSERT INTO [AType] VALUES(1,'a')
INSERT INTO [AType] VALUES(50,'b')
INSERT INTO [AType] VALUES(100,'c')

select from atype where Aid < 50
go
delete from Atype where AID < 50
go
select from atype where Aid < 50
最后一句查询仍然有记录输出. :(
by 怡红公子
报告已经发送给MSSQL开发小组,他们承认这一错误。
在没有新的补丁出来之前,给出以下建议:
不要在单列上使用降序索引,因为这并没有在性能上带来好处,仅仅是省略了Order by field desc几个字而已,用qa的show plan看一下就知道了,不管有没有order by或者不管是asc还是desc,都没有这项开销的(在聚簇索引上)。
降序索引一般是用于复合索引的,这可能是这个bug出现的原因。
原文:
Note that there is no need to create a descending index on a single column because SQL Server can traverse
an ascending index backwards when appropriate. Descending is normally used only in composite indexes.
This is probably why the bug surfaces here

时间: 2024-09-10 07:08:09

在SQL2k降序索引上使用中bug的相关文章

关于Oracle降序索引的定意及回溯

oracle|索引 降序索引本质上是FBI,其具体定义可以通过 user_ind_expressions 或dba_ind_expressions 查询.那么同样的,降序索引只有在CBO下才能被使用. Connected to Oracle9i Enterprise Edition Release 9.2.0.4.0 Connected as eygle SQL> create table t as select * from dba_users; Table created SQL> cre

mysql降序索引和减轻索引扫描

Descending indexing and loose index scan 降序索引和减轻索引扫描 Comments to my previous posts, especially this one by Gokhan inspired me to write a bit about descending indexes and about loose index scan, or what Gokhan calls "better range" support. None o

[20140512]关于降序索引.txt

[20140512]关于降序索引.txt https://jonathanlewis.wordpress.com/2014/05/07/quiz-night-23/ 提到建立降序索引,会出现建立唯一索引出现促错误的问题,自己做一个测试了解一些细节: 1.测试环境: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Datab

c语言-C填空题:键盘上输入10个整数,程序按降序完成从大到小排序

问题描述 C填空题:键盘上输入10个整数,程序按降序完成从大到小排序 #include void sort(int *p,int *q) { int *max,*s; if(p>q)return; max=p; __ for(s=p+1;s<=q;s++)__ if()max=s; swap(); sort((),q); } void swap(int *x,int *y) { int temp; temp=*x; *x=*y; *y=temp; } void main() { int i,a

ORA FAQ 性能调整系列之——当索引第一列由序列产生,一个逆序索引有什么用?

索引|性能 ORA FAQ 性能调整系列之--The Oracle (tm) Users' Co-Operative FAQWhy would a reverse index be useful when the leading column of the index is generated from a sequence ?当索引第一列由序列产生,一个逆序索引有什么用?--------------------------------------------------------------

PHP中数组元素升序、降序及重新排序的函数

在PHP数组学习摘录部分了解到最基本的PHP数组的建立和数组元素的显示.需要深入学习下PHP数组的相关操作.首先接触的就是数组元素的升序.降序的排序问题. 1,快速创建数组的函数range() 比如range()函数可以快速创建从1到9的数字数组: <?php $numbers=range(1,9);echo $numbers[1];?> 当然,使用range(9,1)则创建了9到1的数字数组.同时,range()还可以创建从a到z 的字符数组: <?php $numbers=range

DataGrid连接Access的快速分页法(3)——SQL语句的选用(降序)

access|datagrid|分页|语句 DataGrid连接Access的快速分页法(3)--SQL语句的选用(降序)三.降序(1)@PageIndex <= @FirstIndexSELECT TOP @PageSize @QueryFields FROM @TableName WHERE @ConditionORDER BY @PrimaryKey DESC (2)@FirstIndex < @PageIndex <= @MiddleIndex SELECT TOP @PageS

sql server 2008-如何修改数据库默认排序为降序

问题描述 如何修改数据库默认排序为降序 请教一个问题 以前做的一个东西 查询数据没用order by : 查询出来的数据是按主键 升序排的 现在想改成 按另外一个字段降序排 由于丢失源码 能在数据库里修改吗 尝试新建 视图 索引 均无效 SQLSERVER 2008 解决方案 在管理器中选中数据库,右键-->属性-->选项,右边第一个就是排序规则 解决方案二: http://m.blog.csdn.net/blog/lichxi1002/19611227 解决方案三: 楼上的兄弟 你说的这个我

linq关于动态升序或降序进行排序,3个字段都要

问题描述 有3个字段要排序,但是升序或降序有参数决定本来以为可以如下if(第一个参数是升序)query=query.orderby("a")elsequery=query.OrderByDescending("a")endifif(第二个参数是升序)query=query.orderby("b")elsequery=query.OrderByDescending("b")endifif(第三个参数是升序)query=query