程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 索引對查詢條件順序的影響

索引對查詢條件順序的影響

編輯:關於MYSQL數據庫
一則"表的索引影響查詢條件順序"示例

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

  環境: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 時發生語法錯誤。

--*/


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved