sql 優化查詢

(—)大大提高查詢效率的幾種技巧

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

2. 經過實踐驗證,charindex()並不比前面加%的like更能提高查詢效率,並且charindex()會使索引失去作用(指sqlserver數據庫)

3. column like '%"&word&"%' 會使索引不起作用
column like '"&word&"%' 會使索引起作用(去掉前面的%符號)
(指sqlserver數據庫)

4. '%"&word&"%' 與'"&word&"%' 在查詢時的區別:
比如你的字段內容爲 一個容易受傷的女人
'%"&word&"%' :會通配所有字符串,不論查“受傷”還是查“一個”,都會顯示結果。
'"&word&"%' :只通配前面的字符串,例如查“受傷”是沒有結果的,只有查“一個”,纔會顯示結果。

5. 字段提取要按照“需多少、提多少”的原則,避免“select *”,儘量使用“select 字段1,字段2,字段3........”。實踐證明:每少提取一個字段,數據的提取速度就會有相應的提升。提升的速度還要看您捨棄的字段的大小來判斷。

6. order by按聚集索引列排序效率最高。一個sqlserver數據表只能建立一個聚集索引,一般默認爲ID,也可以改爲其它的字段。

7. 爲你的表建立適當的索引,建立索引可以使你的查詢速度提高几十幾百倍。(指sqlserver數據庫)

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

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

Sqlserver索引與查詢效率分析。

表 News

字段
Id:自動編號
Title:文章標題
Author:作者
Content:內容
Star:優先級
Addtime:時間

記錄:100萬條
測試機器:P4 2.8/1G內存/IDE硬盤

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(二)

問題類型:ACCESS數據庫字段中含有日文片假名或其它不明字符時查詢會提示內存溢出。

解決方法:修改查詢語句

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

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

(三)

問題類型:如何用簡易的辦法實現類似百度的多關鍵詞查詢(多關鍵詞用空格或其它符號間隔)。

解決方法:

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

sql="select * tablename where"

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章