`
逆风的香1314
  • 浏览: 1429756 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

索引对查询条件顺序的影响

阅读更多

原帖地址:
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=207897

环境:Sql Server2000 +sp4

问题:
select datediff(day,'20040910','20040920')  --这句可以执行

--而下面这句不能执行(有时也可以执行)
--sub_para为varchar(8),错误信息是:从字符串转换为 datetime 时发生语法错误。
select * from T_SUB
where item_local_code='03004'
 and  datediff(day,sub_para,getdate())=29
 and (sub_del_flag<>1)

--而且不能执行的时候,这个语句不会返回任何记录集
select * from t_sub
where  item_local_code='03004'
 and isDate(sub_para)=0

-------------------------------------------------------------------------
--原因,表中创建的索引影响了条件的执行顺序
--导致先执行了 datediff(day,sub_para,getdate())

--下面的测试说明了这个问题
--测试表及数据
create table tb(
item_local_code char(5),
sub_del_flag int,
sub_para varchar(10),
constraint PK_t primary key(sub_para,item_local_code)
)
insert tb select '03004',1,'2003-1-1'
union all select '03005',1,'2003a1-1'
go

--查询语句
select * from (
 select * from tb
 where item_local_code='03004'
  and sub_del_flag<>0
  and isdate(sub_para)=1
) A where datediff(day,sub_para,getdate())>29
go

--删除测试
drop table tb

/*--测试结果

item_local_code sub_del_flag sub_para  
--------------- ------------ ----------
03004           1            2003-1-1

服务器: 消息 241,级别 16,状态 1,行 3
从字符串转换为 datetime 时发生语法错误。

--*/

分享到:
评论

相关推荐

    SQLServer索引对查询条件的影响

    #### 查询条件顺序对查询性能的影响 假设我们需要执行以下查询: ```sql SELECT * FROM TABLE1 WHERE A &gt;= 1 AND B = '1' AND C ; ``` 这个查询会先检查`A &gt;= 1`,然后是`B = '1'`,最后是`C 。这种查询条件的...

    mysql多条件索引

    这意味着查询条件必须从索引的第一列开始,并按照索引列的顺序匹配,直到遇到范围查询(如`, `LIKE`等)或者中间缺失某列。例如,对于`name, age, id`的多列索引,查询条件`name='nginx.cn' and age in(15,16,17)`...

    索引介绍聚集索引和非聚集索引

    - **更新性能**:由于聚集索引会影响数据行的物理顺序,因此在插入、删除或更新操作时可能会引起更多的页面分裂或重组,而非聚集索引则相对较少受到影响。 - **存储空间**:聚集索引由于包含实际的数据行,因此通常...

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    本文将深入探讨`ORDER BY`子句在Oracle中的排序机制,以及查询时根据`IN`条件顺序输出的方法。 首先,`ORDER BY`用于指定查询结果的排序方式,可以基于一个或多个列进行升序(ASC)或降序(DESC)排序。然而,...

    mysql查询优化之索引优化

    - **复合索引**:如果一个查询涉及多个列,可以创建复合索引,其中列的顺序至关重要,应将最常用于筛选的列放在前面。 - **NULL值与索引**:对于包含NULL值的列,B-Tree索引可能会降低性能,因为NULL在索引中被视为...

    数据库 使用索引提高查询效率.ppt

    而有了索引,数据库系统可以更快地定位到所需数据,尤其在查询条件为索引列时,执行效率显著提高。索引的存在类似于书籍的目录,帮助我们迅速找到所需内容。 8.1.2 何时使用索引 - 主键列:通常主键列自动创建聚集...

    MySQL-数据库-索引详解

    由于索引文件很小,而且索引有顺序,可以极大地提高查询的效率。 索引的存放内容 ------------------ 索引列的值(有序) 物理行地址 索引的分类 ------------- ### 聚集索引与非聚集索引 聚集索引中键值的逻辑...

    SQLServer 索引查询优化指南

    本指南将深入探讨SQLServer中的索引原理及其对查询优化的影响。索引是数据库性能的关键因素,它能显著提高数据检索的速度,从而提升应用程序的响应速度。 1. **索引的基本概念** - 索引是一种数据结构,类似于书籍...

    聚集索引与非聚集索引的区别

    非聚焦索引则是一种索引,其中索引的逻辑顺序与磁盘上数据行的物理存储顺序不一致。在非聚焦索引中,索引结构与数据分开存储,索引条目包含了指向实际数据行的指针。 - **定义**:非聚焦索引中,索引条目包含了指向...

    数据库索引设计和优化

    2. 复合索引:当多个列共同决定查询效率时,可以创建复合索引,即包含多个列的索引,顺序很重要,应根据查询条件选择最佳顺序。 3. 覆盖索引:如果查询只需要索引中的列,覆盖索引可以避免回表操作,提高查询速度。 ...

    mysql高性能索引查询(查询性能问题、索引使用原则、索引创建、索引的优点缺点).docx

    这里涉及到了“最左前缀原则”,即在使用组合索引时,查询条件必须与索引定义的字段顺序一致,并且至少包含索引的第一个字段。例如,上述索引支持如下查询: ```sql SELECT * FROM ds_order WHERE create_time = '...

    SQL SERVER数据库索引、查询.pdf

    - 查询模式:索引应覆盖经常出现在查询条件中的列。 - 表大小:对于小表,索引可能带来的性能提升不明显。 - 索引宽度:窄索引占用空间少,维护成本低,但可能无法覆盖更多查询;宽索引则相反。 - 使用工具:SQL...

    索引跳跃扫描案例优化分享.txt

    - **背景**:在传统的索引访问路径中,如果索引列顺序与查询条件顺序不一致,则可能导致全表扫描或全索引扫描,这将大大降低查询效率。 - **解决方案**:索引跳跃扫描通过跳过不必要的索引条目,只访问那些可能...

    MySQL索引面试题+索引优化+索引失效

    MySQL索引是数据库中用于提高查询效率的重要组成部分。在面试过程中,常常会涉及到MySQL索引的相关问题,包括索引的原理、...避免对索引列进行函数操作或者表达式计算,尽量保持查询条件与索引列的数据类型一致。同时

    SQLSEVER索引和索引调整向导

    * 聚簇索引与基表的物理顺序相同,非聚簇索引与基表的物理顺序不相同。 * 索引既可以直接创建,也可以间接创建。 * 可以在优化隐藏中使用索引。 * 使用查询处理器执行 SQL 语句,在一个表上一次只能使用一个索引。 *...

    mysql索引失效.docx MySQL索引失效是指在查询执行过程中,数据库无法有效地使用索引来提高查询性能

    当查询条件与索引列的顺序不匹配,或者使用了函数或表达式来处理索引列时,MySQL同样可能无法利用索引。例如,如果索引按`timestamp`类型建立,但在查询时对`timestamp`列使用了函数处理,则索引将无法被利用。 **...

    oracle,数据库索引

    选择索引列时,应关注查询的WHERE和JOIN子句,并通过实验来评估索引对查询性能的影响。同时,注意避免在单个表上创建过多索引,以及避免索引定义的重叠。 常见的索引类型包括: 1. **唯一索引**:不允许重复值。 2....

Global site tag (gtag.js) - Google Analytics