明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

幾個(gè)查詢優(yōu)化小技巧,可以大大提高效率并處理一些問(wèn)題

[摘要]一個(gè)有效的優(yōu)化與不優(yōu)化或錯(cuò)誤優(yōu)化之間的差別,可能可以讓你的程序執(zhí)行速度差別幾十倍甚至幾百倍。(本文不太適用于數(shù)據(jù)庫(kù)高手觀看,如有錯(cuò)誤,歡迎不批評(píng)指正。)以下 word 代表查詢字符串,tablename代表數(shù)據(jù)表名,column代表字段名==============================...
一個(gè)有效的優(yōu)化與不優(yōu)化或錯(cuò)誤優(yōu)化之間的差別,可能可以讓你的程序執(zhí)行速度差別幾十倍甚至幾百倍。

(本文不太適用于數(shù)據(jù)庫(kù)高手觀看,如有錯(cuò)誤,歡迎不批評(píng)指正。)

以下 word 代表查詢字符串,tablename代表數(shù)據(jù)表名,column代表字段名


===========================================================


技巧一:

問(wèn)題類型:ACCESS數(shù)據(jù)庫(kù)字段中含有日文片假名或其它不明字符時(shí)查詢會(huì)提示內(nèi)存溢出。

解決方法:修改查詢語(yǔ)句

sql="select * from tablename where column like '%"&word&"%'"
改為
sql="select * from tablename"
rs.filter = " column like '%"&word&"%'"


===========================================================


技巧二:

問(wèn)題類型:如何用簡(jiǎn)易的辦法實(shí)現(xiàn)類似百度的多關(guān)鍵詞查詢(多關(guān)鍵詞用空格或其它符號(hào)間隔)。

解決方法:

'//用空格分割查詢字符串
ck=split(word," ")
'//得到分割后的數(shù)量
sck=UBound(ck)

sql="select * tablename where"

在一個(gè)字段中查詢
For i = 0 To sck
SQL = SQL & tempJoinWord & "(" & _
"column like '"&ck(i)&"%')"
tempJoinWord = " and "
Next

在二個(gè)字段中同時(shí)查詢
For i = 0 To sck
SQL = SQL & tempJoinWord & "(" & _
"column like '"&ck(i)&"%' or " & _
"column1 like '"&ck(i)&"%')"
tempJoinWord = " and "
Next



===========================================================



技巧三:大大提高查詢效率的幾種技巧

1. 盡量不要使用 or,使用or會(huì)引起全表掃描,將大大降低查詢效率。

2. 經(jīng)過(guò)實(shí)踐驗(yàn)證,charindex()并不比前面加%的like更能提高查詢效率,并且charindex()會(huì)使索引失去作用(指sqlserver數(shù)據(jù)庫(kù))

3.  column like '%"&word&"%' 會(huì)使索引不起作用
     column like '"&word&"%' 會(huì)使索引起作用(去掉前面的%符號(hào))
     (指sqlserver數(shù)據(jù)庫(kù))

4. '%"&word&"%' 與'"&word&"%' 在查詢時(shí)的區(qū)別:
比如你的字段內(nèi)容為 一個(gè)容易受傷的女人
'%"&word&"%' :會(huì)通配所有字符串,不論查“受傷”還是查“一個(gè)”,都會(huì)顯示結(jié)果。
'"&word&"%' :只通配前面的字符串,例如查“受傷”是沒(méi)有結(jié)果的,只有查“一個(gè)”,才會(huì)顯示結(jié)果。

5. 字段提取要按照“需多少、提多少”的原則,避免“select *”,盡量使用“select 字段1,字段2,字段3........”。實(shí)踐證明:每少提取一個(gè)字段,數(shù)據(jù)的提取速度就會(huì)有相應(yīng)的提升。提升的速度還要看您舍棄的字段的大小來(lái)判斷。

6. order by按聚集索引列排序效率最高。一個(gè)sqlserver數(shù)據(jù)表只能建立一個(gè)聚集索引,一般默認(rèn)為ID,也可以改為其它的字段。

7. 為你的表建立適當(dāng)?shù)乃饕,建立索引可以使你的查詢速度提高幾十幾百倍。(指sqlserver數(shù)據(jù)庫(kù))



===========================================================



以下是建立索引與不建立索引的一個(gè)查詢效率分析:

Sqlserver索引與查詢效率分析。

表 News

字段
Id:自動(dòng)編號(hào)
Title:文章標(biāo)題
Author:作者
Content:內(nèi)容
Star:優(yōu)先級(jí)
Addtime:時(shí)間

記錄:100萬(wàn)條
測(cè)試機(jī)器:P4 2.8/1G內(nèi)存/IDE硬盤

=======================================================

方案1:
主鍵Id,默認(rèn)為聚集索引,不建立其它非聚集索引
select * from News where Title like '%"&word&"%' or Author like '%"&word&"%' order by Id desc

從字段Title和Author中模糊檢索,按Id排序
查詢時(shí)間:50秒

=======================================================

方案2:
主鍵Id,默認(rèn)為聚集索引
在Title、Author、Star上建立非聚集索引
select * from News where Title like '"&word&"%' or Author like '"&word&"%' order by Id desc

從字段Title和Author中模糊檢索,按Id排序
查詢時(shí)間:2 - 2.5秒

=======================================================

方案3:
主鍵Id,默認(rèn)為聚集索引
在Title、Author、Star上建立非聚集索引
select * from News where Title like '"&word&"%' or Author like '"&word&"%' order by Star desc

從字段Title和Author中模糊檢索,按Star排序
查詢時(shí)間:2 秒

=======================================================

方案4:
主鍵Id,默認(rèn)為聚集索引
在Title、Author、Star上建立非聚集索引
select * from News where Title like '"&word&"%' or Author like '"&word&"%'

從字段Title和Author中模糊檢索,不排序
查詢時(shí)間:1.8 - 2 秒


=======================================================

方案5:
主鍵Id,默認(rèn)為聚集索引
在Title、Author、Star上建立非聚集索引
select * from News where Title like '"&word&"%'

select * from News where Author like '"&word&"%'

從字段Title 或 Author中檢索,不排序
查詢時(shí)間:1秒