日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關(guān)于or與in能不能利用索引的探討

說說數(shù)據(jù)庫方面的事情。在網(wǎng)上看到了幾種說法,我們一起來分析一下說的到底對不對,是不是準(zhǔn)確的,有沒有歧義,會不會誤導(dǎo)大家。

創(chuàng)新互聯(lián)建站客戶idc服務(wù)中心,提供綿陽電信機(jī)房機(jī)柜租用、成都服務(wù)器、成都主機(jī)托管、成都雙線服務(wù)器等業(yè)務(wù)的一站式服務(wù)。通過各地的服務(wù)中心,我們向成都用戶提供優(yōu)質(zhì)廉價(jià)的產(chǎn)品以及開放、透明、穩(wěn)定、高性價(jià)比的服務(wù),資深網(wǎng)絡(luò)工程師在機(jī)房提供7*24小時(shí)標(biāo)準(zhǔn)級技術(shù)保障。

1、 or會引起全表掃面。

2、 in會引起全表掃描。

3、 in會引起全表掃描,并且和or等效。

4、 or語句使用不當(dāng)會引起全表掃描。

為了避免一些誤會,同時(shí)也是縮小討論范圍,所以先解釋一個(gè)名詞和說一下前提條件。名詞解釋:全表掃描在數(shù)據(jù)庫中,對無索引的表進(jìn)行查詢一般稱為全表掃描。全表掃描是數(shù)據(jù)庫服務(wù)器用來搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。 引自:http://baike.baidu.com/view/2010124.htm?fr=ala0_1_1

前提條件

數(shù)據(jù)庫:SQL Server2000 + sp4 (注意:一定要安裝sp4補(bǔ)丁包,如果未安裝任何補(bǔ)丁包可能執(zhí)行計(jì)劃會和安裝sp4的不一致)

其他數(shù)據(jù)庫沒有研究,所以在這里就不討論了。

好了,名詞解釋和前提條件都說好了,我們開始討論吧。

第四個(gè)說法是我用google搜索出來的,說的很明確。or“使用不當(dāng)”才會引起全表掃描,那么使用得當(dāng)?shù)脑挘@然是可以避免全表掃描的。文章的例子也說的很明確。http://www.zbitedu.com/?action-viewthread-tid-39219

在這里不得不贊揚(yáng)一下google的強(qiáng)大,google搜索出來的結(jié)構(gòu)都是明確的,而且可以把明確的排在***位。而baidu就不管三七二十一,管你對不對、是否明確,全都收錄進(jìn)來,然后你自己去分析、思考吧。Bs baidu 一下。

而前三總說法就很不明確,和算命先生的那句話有的一拼。即沒有明確的說“一定”會引起全表掃描,也沒有說有沒有例外,含含糊糊,極易誤導(dǎo)人。試問:您有沒有下意識的加上了一個(gè)定語“一定”(or一定會引起全表掃描)呢?如果您沒有加上“一定”這個(gè)定語的話,那么您有沒有想過是否有反例?

如果沒有反例的話,那么就加上“一定”就是正確的,那么原話為什么不加上?

如果有反例的話,那么原話就完全沒有交代清楚。 

所以有沒有反例,這就是一個(gè)很不明確,很誤導(dǎo)人的地方。

當(dāng)然了——in和or是等效的——這句話我是認(rèn)同的。in和or確實(shí)是等效的,數(shù)據(jù)庫會把in轉(zhuǎn)換成or的形式。

開始分析

以一個(gè)Northwind數(shù)據(jù)庫的Employees表 為例(這是SQL Server2000里自帶的數(shù)據(jù)庫),分析幾種SQL語句的執(zhí)行計(jì)劃。

 
 
 
 
  1. SELECT *   
  2. FROM Employees   
  3. WHERE (EmployeeID IN (2, 4, 5))   
  4. SELECT *   
  5. FROM Employees   
  6. WHERE EmployeeID = 2 or EmployeeID =  4 or EmployeeID =  5  

這兩個(gè)SQL語句的執(zhí)行結(jié)果是一致的,執(zhí)行計(jì)劃也是一致的。我們來看看EmployeeID字段在有無索引,有什么類型的索引的情況下,執(zhí)行計(jì)劃都是什么樣子的

1、 EmployeeID不是主鍵(沒有聚集索引和非聚集索引)

從執(zhí)行計(jì)劃里可以明確的看出來,在沒有索引的情況下,確實(shí)引起了全表掃描。(請不要著急下結(jié)論,還有兩種情況沒有看呢。)

2、 是主鍵(聚集索引)  

當(dāng)是主鍵,并且是聚集索引的情況下,執(zhí)行計(jì)劃發(fā)生了變化,避免了全表掃描。

3、 不是主鍵,但是設(shè)置了非聚集索引

這回執(zhí)行計(jì)劃又發(fā)生了變化,不過依然沒有引起全表掃描,只是增加了一個(gè)步驟(使用標(biāo)簽)

本來想看看只有主鍵,但是主鍵字段不設(shè)置索引(聚集和非聚集)的情況下,執(zhí)行計(jì)劃是什么樣子的,但是發(fā)現(xiàn)一個(gè)小問題,我不知道怎么讓設(shè)置成主鍵的字段沒有任何索引?企業(yè)管理器里是把主鍵和聚集索引強(qiáng)行綁定到一起了,把一個(gè)字段設(shè)置成主鍵,同時(shí)也把聚集索引設(shè)置給了這個(gè)字段。目前我是沒發(fā)現(xiàn)怎么把這個(gè)主鍵的索引給去掉。也許應(yīng)該用SQL語句的方式給表設(shè)置主鍵吧。這個(gè)就先不研究了。

總結(jié):in和or會不會引起全表掃描?根據(jù)情況而定。即根據(jù)是否能夠利用索引而定。


網(wǎng)站題目:關(guān)于or與in能不能利用索引的探討
當(dāng)前URL:http://www.5511xx.com/article/dhhjode.html