偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

查詢表達(dá)式對(duì)SQL Server查詢性能的優(yōu)化

數(shù)據(jù)庫 SQL Server
寫查詢語句時(shí),要避免對(duì)數(shù)據(jù)表進(jìn)行的順序讀取,這樣就可以防止SQL Server查詢性能的下降,保障數(shù)據(jù)庫的查詢效率。

SQL Server查詢性能會(huì)隨著系統(tǒng)中一些變化因素而有所變化,SQL Server查詢性能有時(shí)會(huì)直線下降。表的順序讀取是導(dǎo)致SQL Server查詢性能直線下降的原因。

因此,在寫查詢語句時(shí)合理使用查詢條件.要避免對(duì)數(shù)據(jù)表進(jìn)行的順序讀取。主要采用的方法有:

(1)在搜索條件中避免使用關(guān)鍵字LIKE,盡可能使用精確

比較

如果能夠使用一個(gè)更確定的查詢.就盡量避免使用關(guān)鍵字LIKE 。當(dāng)你使用LIKE 搜索條件時(shí),數(shù)據(jù)查詢速度降低。

SEU£CT FR0M 學(xué)生WHERE學(xué)號(hào)mce”2003%”

即便是按”學(xué)號(hào)”建立了索引.上述查詢語句使用了關(guān)鍵字LIKE 導(dǎo)致了順序讀寫。降低了執(zhí)行效率。如果將上面的查詢語句改為如下的形式,則可以使查詢效率提高很多。

SELECT FROM 學(xué)生WHERE (學(xué)號(hào)>:”2003”AND 學(xué)

號(hào)<”2004’’)

(2)避免使用不合理的關(guān)系運(yùn)算符

在SQL Server 2000中,搜索參數(shù)的合法操作符包括=,>,<,>=,<=中的任何一個(gè),如果使用了如”◇ ·-等的不合理的操作符.優(yōu)化器將忽略那一作為搜索參數(shù)的語句.而導(dǎo)致對(duì)數(shù)據(jù)表的順序讀取,不能進(jìn)行優(yōu)化。

SELECT FR0M 學(xué)生WHERE 年齡<>l8

(3)在查詢條件中不要使用對(duì)列進(jìn)行算術(shù)、比較和函數(shù)運(yùn)算對(duì)列進(jìn)行算術(shù)、列比較、函數(shù)運(yùn)算,導(dǎo)致語句無法進(jìn)行優(yōu)化處理,降低SQL Server查詢性能。

例如,成績(學(xué)號(hào),課程代碼,平時(shí)成績,期中成績,期未成績,總平成績,學(xué)分)和上面的學(xué)生表

SELE CT ‘FR OM 成績WHERE 期未成績}0.8>60

(對(duì)列進(jìn)行算術(shù)運(yùn)算)

SELECT FR OM 學(xué)生WH ERE UPPERCASE f姓名、=-.ZHENLIGU”(列進(jìn)行函數(shù)運(yùn)算)

SELECT學(xué)生.學(xué)號(hào),學(xué)生.姓名.成績.總平成績FR 0M 學(xué)生.成績 WHERE 學(xué)生.學(xué)號(hào)=成績.學(xué)號(hào)(列與列之間進(jìn)行比較)

(4)使用正邏輯而不使用非邏輯

因?yàn)椋沁壿嫴僮?如NOT Between、NOT IN和NOT NULL)會(huì)導(dǎo)致對(duì)表中的記錄從***個(gè)記錄開始順序讀?。畽z查數(shù)據(jù)表中的所有行。從而會(huì)降低查詢速度

例如:查詢年齡不在l8到20歲的記錄

SELE CT FR0M 學(xué)生WHERE 年齡N0T BETWEEN 18 A D 20

而應(yīng)改寫為:

SELECT FROM 學(xué)生WHERE年齡<18 0R年齡>20

(5)將BETWEEN轉(zhuǎn)化為AND連接的謂詞

由于執(zhí)行引擎對(duì)各種謂詞的處理方法不同. 因此把邏輯表達(dá)式”B翻 rEEN 表達(dá)式1 AND 表達(dá)式2”寫成等價(jià)且效率較高的用AND連接的兩個(gè)謂詞表達(dá)式.來提高查詢效率。

例如:查詢年齡在18到20歲的記錄

SELECT FROM 學(xué)生WHERE 年齡BE1WEEN 18 AND 20

改寫成:

SELECT FROM 學(xué)生WHERE年齡>=18 AND年齡<=20

(6)用集合運(yùn)算UNION來代替邏輯運(yùn)算OR

盡管索引能提高查詢效率.若在WHERE子句中使用了邏輯運(yùn)算OR表達(dá)式.強(qiáng)迫優(yōu)化器使用順序存取。例如:

SELECT*FR0M 學(xué)生WHERE學(xué)號(hào)>”21005”AND學(xué)號(hào)<”21020”0R系別:”計(jì)算機(jī)系”

雖然在”學(xué)號(hào)”和”系別”上都建有索引.但是在上面的語句中優(yōu)化器還是使用順序存取的方法掃描整個(gè)表。因?yàn)檫@個(gè)語句要檢索的是分離的行的集合.所以將上面的語句改為如下語句:

SELECT FR0M 學(xué)生WHERE學(xué)號(hào)>”21005”AND 學(xué)號(hào)<”21020”

UN10N

SELECT FROM 學(xué)生WHE RE系別=”計(jì)算機(jī)系”

利用”學(xué)號(hào)”和”系別”所建索引進(jìn)行查詢.將所得到的結(jié)果集,通過集合并運(yùn)算UNION,得到查詢結(jié)果集,提高了查詢效率。
 

 

 

【編輯推薦】

SQL Server連接錯(cuò)誤的處理方法

SQL Server管理相關(guān)的注冊(cè)表技巧

帶您了解SQL Server權(quán)限管理策略

SQL Server服務(wù)器角色簡介

SQL Server用戶帳號(hào)管理

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-10-21 11:10:57

SQL Server查

2024-06-27 00:36:06

2011-10-28 16:34:13

LINQ

2009-09-10 15:35:07

LINQ查詢表達(dá)式

2024-03-01 08:51:01

Django查詢表達(dá)式查詢語句

2009-03-23 10:47:43

數(shù)據(jù)庫SQLLINQ

2011-08-12 10:31:01

T-SQL查詢基于列的邏輯表達(dá)式

2009-09-07 17:18:33

LINQ查詢表達(dá)式

2009-09-11 09:53:16

Linq查詢表達(dá)式

2009-08-27 09:13:28

LINQ查詢表達(dá)式

2009-09-17 11:08:55

LINQ查詢表達(dá)式

2021-05-25 09:18:04

正則表達(dá)式Linux字符串

2019-12-17 17:01:02

MySQLSQL數(shù)據(jù)庫

2022-01-14 07:56:39

C#動(dòng)態(tài)查詢

2009-09-17 09:09:50

Lambda表達(dá)式Linq查詢

2021-08-17 10:39:54

SQL Server數(shù)據(jù)庫優(yōu)化

2010-11-12 13:20:31

SQL Server

2009-06-12 09:44:04

LINQ查詢復(fù)合from子句

2010-07-01 14:23:25

SQL Server查

2010-11-12 11:25:44

SQL SERVER視
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)