| 導購 | 订阅 | 在线投稿
分享
 
 
 

SQL Server數據庫查詢優化的常用方法總結

來源:互聯網  2008-07-19 08:21:47  評論

SQL Server數據庫查詢優化的常用方法總結:

本文中,abigale代表查詢字符串,ada代表數據表名,alice代表字段名。

技巧一:

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

解決方法:修改查詢語句

sql="select * from ada where alice like '%"&abigale&"%'"

改爲

sql="select * from ada"

rs.filter = "alice like '%"&abigale&"%'"

技巧二:

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

解決方法:

'//用空格分割查詢字符串

ck=split(abigale," ")

'//得到分割後的數量

sck=UBound(ck)

sql="select * ada where"

在一個字段中查詢

For i = 0 To sck

SQL = SQL & tempJoinWord & "(" & _

"alice like '"&ck(i)&"%')"

tempJoinWord = " and "

Next

在二個字段中同時查詢

For i = 0 To sck

SQL = SQL & tempJoinWord & "(" & _

"alice like '"&ck(i)&"%' or " & _

"alice1 like '"&ck(i)&"%')"

tempJoinabigale = " and "

Next

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

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

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

3. alice like '%"&abigale&"%' 會使索引不起作用

like '"&abigale&"%' 會使索引起作用(去掉前面的%符號)

(指sqlserver數據庫)

4. '%"&abigale&"%' 與'"&abigale&"%' 在查詢時的區別:

比如你的字段內容爲:斯卡布羅集市

'%"&abigale&"%' :會通配所有字符串,不論查「集市」還是查「斯卡」,都會顯示結果。

'"&abigale&"%' :只通配前面的字符串,例如查「集市」是沒有結果的,只有查「斯卡」,才會顯示結果。

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 '%"&abigale&"%'

or Author like '%"&abigale&"%' order by Id desc

從字段Title和Author中模糊檢索,按Id排序

查詢時間:50秒

方案2:

主鍵Id,默認爲聚集索引

在Title、Author、Star上建立非聚集索引

select * from News where Title like '"&abigale&"%'

or Author like '"&abigale&"%' order by Id desc

從字段Title和Author中模糊檢索,按Id排序

查詢時間:2 - 2.5秒

方案3:

主鍵Id,默認爲聚集索引

在Title、Author、Star上建立非聚集索引

select * from News where Title like '"&abigale&"%'

or Author like '"&abigale&"%' order by Star desc

從字段Title和Author中模糊檢索,按Star排序

查詢時間:2 秒

方案4:

主鍵Id,默認爲聚集索引

在Title、Author、Star上建立非聚集索引

select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%'

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

方案5:

主鍵Id,默認爲聚集索引

在Title、Author、Star上建立非聚集索引

select * from News where Title like '"&abigale&"%'

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

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

SQL Server數據庫查詢優化的常用方法總結: 本文中,abigale代表查詢字符串,ada代表數據表名,alice代表字段名。 技巧一: 問題類型:ACCESS數據庫字段中含有日文片假名或其它不明字符時查詢會提示內存溢出。 解決方法:修改查詢語句 sql="select * from ada where alice like '%"&abigale&"%'" 改爲 sql="select * from ada" rs.filter = "alice like '%"&abigale&"%'" 技巧二: 問題類型:如何用簡易的辦法實現類似百度的多關鍵詞查詢(多關鍵詞用空格或其它符號間隔)。 解決方法: '//用空格分割查詢字符串 ck=split(abigale," ") '//得到分割後的數量 sck=UBound(ck) sql="select * ada where" 在一個字段中查詢 For i = 0 To sck SQL = SQL & tempJoinWord & "(" & _ "alice like '"&ck(i)&"%')" tempJoinWord = " and " Next 在二個字段中同時查詢 For i = 0 To sck SQL = SQL & tempJoinWord & "(" & _ "alice like '"&ck(i)&"%' or " & _ "alice1 like '"&ck(i)&"%')" tempJoinabigale = " and " Next 技巧三:提高查詢效率的幾種技巧 1. 盡量不要使用 or,使用or會引起全表掃描,將大大降低查詢效率。 2. 經過實踐驗證,charindex()並不比前面加%的like更能提高查詢效率,並且charindex()會使索引失去作用(指sqlserver數據庫) 3. alice like '%"&abigale&"%' 會使索引不起作用 like '"&abigale&"%' 會使索引起作用(去掉前面的%符號) (指sqlserver數據庫) 4. '%"&abigale&"%' 與'"&abigale&"%' 在查詢時的區別: 比如你的字段內容爲:斯卡布羅集市 '%"&abigale&"%' :會通配所有字符串,不論查「集市」還是查「斯卡」,都會顯示結果。 '"&abigale&"%' :只通配前面的字符串,例如查「集市」是沒有結果的,只有查「斯卡」,才會顯示結果。 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 '%"&abigale&"%' or Author like '%"&abigale&"%' order by Id desc 從字段Title和Author中模糊檢索,按Id排序 查詢時間:50秒 方案2: 主鍵Id,默認爲聚集索引 在Title、Author、Star上建立非聚集索引 select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%' order by Id desc 從字段Title和Author中模糊檢索,按Id排序 查詢時間:2 - 2.5秒 方案3: 主鍵Id,默認爲聚集索引 在Title、Author、Star上建立非聚集索引 select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%' order by Star desc 從字段Title和Author中模糊檢索,按Star排序 查詢時間:2 秒 方案4: 主鍵Id,默認爲聚集索引 在Title、Author、Star上建立非聚集索引 select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%' 從字段Title和Author中模糊檢索,不排序查詢時間:1.8 - 2 秒 方案5: 主鍵Id,默認爲聚集索引 在Title、Author、Star上建立非聚集索引 select * from News where Title like '"&abigale&"%' 或 select * from News where Author like '"&abigale&"%' 從字段Title 或 Author中檢索,不排序查詢時間:1秒
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有