收 藏 投 稿 繁 体 RSS 
站长吧-中国站长学习与交流的网站
首 页 运 营 学 院 建 站 论 坛
Web master8.net  
 网站运营  
  欢迎在本站发布信息,在线投递稿件请点这里。编辑QQ:4908220,欢迎联系交流。
业界动态 创业故事 推广研究 策划盈利 电子商务 企业平台
  站长工具
SEO查询 Whois查询 Pr查询 域名查询 IP查询 网页编辑器
 建站服务  
  如有建站意向,请尽快联系我们,以便安排时间... 建站服务 QQ4908220 QQ:4908220
作品展示 服务范围 服务流程 服务报价 联系方式 付款方式
文章正文  » 您的当前位置: 首页 >> 学院 >> 数据库 >> MySQL
索引对查询条件顺序的影响
  来源:互联网 | 时间:2007-04-15 | 浏览:   相关评论 | 报告错误 | 发布文章
【字号: | | 】 【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)

  一则"表的索引影响查询条件顺序"示例

-------------------------------------------------------------------------

  环境: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 时发生语法错误。

--*/

master8
  • 上一篇:MySQL 5.0.16 乱码问题处理办法
  • 下一篇:Skype出台海外赔偿方案

  • 我要投稿  打印本文  推荐本文  加入收藏  返回顶部  关闭窗口
    搜模板(www.somoban.com) 原创网站模板交易平台
    阿里妈妈再掀疯狂采购风,网站广告位严重告急,急召天下站长
    基于PHP+MySQL的整站、模块、插件开发等或者按需求实现相应功能;
基于各PHP主流建站系统CMS,BBS,BLOG等的模板定制,完全手写代码;
整站数据迁移或备份恢复;网页代码优化、重构;整站常规SEO优化;网站技术支持;
点击了解详情...
    站长论坛
    • 验证码: