三個影響SQL Server性能的關(guān)鍵(2)_Mssql數(shù)據(jù)庫教程
推薦:談SQL Server 數(shù)據(jù)挖掘應(yīng)用于商業(yè)智能中智能應(yīng)用的平臺 在過去的二十年中,經(jīng)濟(jì)快速發(fā)展,組織機(jī)構(gòu)普遍都收集了大量的商業(yè)數(shù)據(jù)。然而,擁有大量的數(shù)據(jù)并不意味著擁有了豐富的商業(yè)信息。因此,商業(yè)智能需要進(jìn)展到下一步數(shù)據(jù)挖掘。 數(shù)據(jù)挖掘能幫助您在瀏覽巨量數(shù)據(jù)的同時從中發(fā)現(xiàn)潛在有效的模式,并
考慮使用窄的索引在一個或兩個列上,窄索引比多索引和復(fù)合索引更能有效。用窄的索引,在每一頁上將會有更多的行和更少的索引級別(相對與多索引和復(fù)合索引而言),這將推進(jìn)系統(tǒng)性能。對于多列索引,SQL Server維持一個在所有列的索引上的密度統(tǒng)計(用于聯(lián)合)和在第一個索引上的histogram(柱狀圖)統(tǒng)計。根據(jù)統(tǒng)計結(jié)果,如果在復(fù)合索引上的第一個索引很少被選擇使用,那么優(yōu)化器對很多查詢請求將不會使用索引。
有用的索引會提高select語句的性能,包括insert,uodate,delete。但是,由于改變一個表的內(nèi)容,將會影響索引。每一個insert,update,delete語句將會使性能下降一些。實(shí)驗(yàn)表明,不要在一個單表上用大量的索引,不要在共享的列上(指在多表中用了參考約束)使用重疊的索引。
在某一列上檢查唯一的數(shù)據(jù)的個數(shù),比較它與表中數(shù)據(jù)的行數(shù)做一個比較。這就是數(shù)據(jù)的選擇性,這比較結(jié)果將會幫助你決定是否將某一列作為侯選的索引列,如果需要,建哪一種索引。你可以用下面的查詢語句返回某一列的不同值的數(shù)目。
select count(distinct cloumn_name) from table_name
假設(shè)column_name是一個10000行的表,則看column_name返回值來決定是否應(yīng)該使用,及應(yīng)該使用什么索引。
Unique values Index
5000 Nonclustered index
20 Clustered index
3 No index
鏃索引和非鏃索引的選擇
<1>鏃索引是行的物理順序和索引的順序是一致的。頁級,低層等索引的各個級別上都包含實(shí)際的數(shù)據(jù)頁。一個表只能是有一個鏃索引。由于update,delete語句要求相對多一些的讀操作,因此鏃索引常常能加速這樣的操作。在至少有一個索引的表中,你應(yīng)該有一個鏃索引。
在下面的幾個情況下,你可以考慮用鏃索引:
例如: 某列包括的不同值的個數(shù)是有限的(但是不是極少的)
顧客表的州名列有50個左右的不同州名的縮寫值,可以使用鏃索引。
例如: 對返回一定范圍內(nèi)值的列可以使用鏃索引,比如用between,>,>=,<,<=等等來對列進(jìn)行操作的列上。
select * from sales where ord_date between ’5/1/93’ and ’6/1/93’
例如: 對查詢時返回大量結(jié)果的列可以使用鏃索引。
SELECT * FROM phonebook WHERE last_name = ’Smith’
當(dāng)有大量的行正在被插入表中時,要避免在本表一個自然增長(例如,identity列)的列上建立鏃索引。如果你建立了鏃的索引,那么insert的性能就會大大降低。因?yàn)槊恳粋插入的行必須到表的最后,表的最后一個數(shù)據(jù)頁。
當(dāng)一個數(shù)據(jù)正在被插入(這時這個數(shù)據(jù)頁是被鎖定的),所有的其他插入行必須等待直到當(dāng)前的插入已經(jīng)結(jié)束。
一個索引的葉級頁中包括實(shí)際的數(shù)據(jù)頁,并且在硬盤上的數(shù)據(jù)頁的次序是跟鏃索引的邏輯次序一樣的。
<2>一個非鏃的索引就是行的物理次序與索引的次序是不同的。一個非鏃索引的葉級包含了指向行數(shù)據(jù)頁的指針。
在一個表中可以有多個非鏃索引,你可以在以下幾個情況下考慮使用非鏃索引。
在有很多不同值的列上可以考慮使用非鏃索引
例如:一個part_id列在一個part表中
select * from employee where emp_id = ’pcm9809f’
查詢語句中用order by 子句的列上可以考慮使用鏃索引。
分享:怎樣改善SQL Server數(shù)據(jù)庫的內(nèi)存管理最近,為了能在數(shù)據(jù)庫服務(wù)器中運(yùn)行其他應(yīng)用程序,在保持?jǐn)?shù)據(jù)庫操作系統(tǒng)版本不變的前提下對數(shù)據(jù)庫服務(wù)器進(jìn)行了軟、硬件上的升級。在軟件上,將操作系統(tǒng)從Windows 2000升級到Windows Server 2003;在硬件上,將服務(wù)器中的內(nèi)存由原來的512MB增加到1GB(1024MB)。
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- SQL Server導(dǎo)入數(shù)據(jù)時id自增屬性丟失解決方法
- 詳解Windows Server 2008中的NAP
- 解讀4個編寫SQL語句需要注意的常識
- 實(shí)現(xiàn)刪除主表數(shù)據(jù)時, 判斷與之關(guān)聯(lián)的外鍵表是否有數(shù)據(jù)
- 詳解SQL Server與ASP互操作的時間處理
- SQL SERVER數(shù)據(jù)庫開發(fā)之存儲過程應(yīng)用
- 看看自己掌握了多少SQL快捷鍵
- sql 游標(biāo)的使用—游標(biāo)FOR循環(huán)小例子
- 談值得收藏的SQL時間函數(shù)
- 解析SQL Server數(shù)據(jù)應(yīng)用在不同的數(shù)據(jù)庫中
猜你也喜歡看這些
- 用MyEclipse配置DataBase Explorer(圖示)
- 驗(yàn)證實(shí)例名稱是否正確
- Mysql兩種情況下更新字段中部分?jǐn)?shù)據(jù)的方法
- 服務(wù)器不支持 MySql 數(shù)據(jù)庫的解決方法
- 解析SQLite中的常見問題與總結(jié)詳解
- MySQL DELETE語法使用詳細(xì)解析
- 總結(jié)MySQL建表、查詢優(yōu)化的一些實(shí)用小技巧
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫以及函數(shù)、存儲過程的介紹
- 深入SQLite基本操作的總結(jié)詳解
- 基于mysql事務(wù)、視圖、存儲過程、觸發(fā)器的應(yīng)用分析
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-三個影響SQL Server性能的關(guān)鍵(2)
。