首頁 資料庫 mysql教程 SQL Server索引管理的六大铁律

SQL Server索引管理的六大铁律

Jun 07, 2016 pm 04:18 PM
server 管理 索引

索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。通过索引,可以加快数据的查询速度和减少系统的响应时间;可以使表和表之间的连接速度加快。 但是,不是在任何时候

  索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。通过索引,可以加快数据的查询速度和减少系统的响应时间;可以使表和表之间的连接速度加快。

  但是,不是在任何时候使用索引都能够达到这种效果。若在不恰当的场合下,使用索引反而会事与愿违。所以,在SQL Server数据库中使用索引的话,还是需要遵守一定的规则。笔者觉得,主要是需要遵守六大铁律。

  铁律一:天下没有免费的午餐,使用索引是需要付出代价的

  索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不会那么随意到处建立索引了。

  仔细数数,其实建立索引的代价还是蛮大的。如创建索引和维护索引都需要花费时间与精力。特别是在数据库设计的时候,数据库管理员为表中的哪些字段需要建立索引,要调研、要协调。如当建有索引的表中的纪录又增加、删除、修改操作时,数据库要对索引进行重新调整。虽然这个工作数据库自动会完成,但是,需要消耗服务器的资源。当表中的数据越多,这个消耗的资源也就越多。如索引是数据库中实际存在的对象,所以,每个索引都会占用一定的物理空间。若索引多了,不但会占用大量的物理空间,而且,也会影响到整个数据库的运行性能。

  可见,数据库管理员若要采用索引来提高系统的性能,自身仍然需要付出不少的代价。数据库管理员现在要考虑的就是如何在这两个之间取得一个均衡。或者说,找到一个回报与投入的临界点。

  铁律二:对于查询中很少涉及的列或者重复值比较多的列,不要建立索引

  在查询的时候,如果我们不按某个字段去查询,则在这个字段上建立索引也是浪费。如现在有一张员工信息表,我们可能按员工编号、员工姓名、或者出身地去查询员工信息。但是,我们往往不会按照身份证号码去查询。虽然这个身份证号码是唯一的。此时,即使在这个字段上建立索引,也不能够提高查询的速度。相反,增加了系统维护时间和占用了系统空间。这简直就是搬起石头砸自己的脚呀。

  另外,如上面的员工信息表,有些字段重复值比较多。如性别字段主要就是“男”、“女”;职位字段中也是有限的几个内容。此时,在这些字段上添加索引也不会显著的增加查询速度,减少用户响应时间。相反,因为需要占用空间,反而会降低数据库的整体性能。

  数据库索引管理中的第二条铁律就是,对于查询中很少涉及的列或者重复值比较多的列,不要建立索引。

  铁律三:对于按范围查询的列,最好建立索引

  在信息化管理系统中,很多时候需要按范围来查询某些交易记录。如在ERP系统中,经常需要查询当月的销售订单与销售出货情况,这就需要按日期范围来查询交易记录。如有时候发现库存不对时,也需要某段时期的库存进出情况,如5月1日到12月3日的库存交易情况等等。此时,也是根据日期来进行查询。

  对于这些需要在指定范围内快速或者频繁查询的数据列,需要为其建立索引。因为索引已经排序,其保存的时候指定的范围是连续的,查询可以利用索引的排序,加快查询时间,减少用户等待时间。

  不过,若虽然可能需要按范围来进行查询,但是,若这个范围查询条件利用的不多的情况下,最好不好采用索引。如在员工信息表中,可能需要查询 2008年3月份以前入职的员工明细,要为他们增加福利。但是,由于表中记录不多,而且,也很少进行类似的查询。若维这个字段建立索引,虽然无伤大雅,但是很明显,索引所获得的收益要低于其成本支出。对数据库管理员来说,是得不偿失的。

  再者,若采用范围查询的话,最好能利用TOP关键字来限制一次查询的结果。如第一次按顺序只显示前面的500条记录等等。把TOP关键字跟范围一起使用,可以大大的提高查询的效率。

  铁律四:表中若有主键或者外键,一定要为其建立索引

  定义有主键的索引列,一定要为其建立索引。因为主键可以加速定位到表中的某一行。结合索引的作用,可以使得查询的速度加倍。如在员工信息表中,我们往往把员工编号设置为主键。因为这不但可以提高查询的速度,而且因为主键要求记录的唯一,还可以保证员工编号的唯一性。此时,若再把这个员工编号字段设置为索引,则通过员工编号来查询员工信息,其效率要比没有建立索引高出许多。

  另外,若要使得某个字段的值唯一,可以通过两种索引方式实现。一种就是上面所讲的主键索引。还有一种就是唯一索引,利用UNIQUE关键字指定字段内容的唯一性。这两种方式都会在表中的指定列上自动创建唯一索引。这两种方式的结果没有明显的区别。查询优化器不会区分到底是哪种方式建立的唯一性索引,而且他们进行数据查询的方式也是相同的。

  若某张表中的数据列定义有外键,则最好也要为这个字段建立索引。因为外键的主要作用就在于表与表之间的连接查询。若在外键上建立索引,可以加速表与表之间的连接查询。如在员工基本信息表中,有一个字段为员工职位。由于员工职位经常在变化,在这里,存储的其实只是一个员工职位的代码。在另外一张职位信息表中详细记录着该职位的相关信息。此时,这个员工职位字段就是外键。若在这个字段上建立外键,则可以显著提高两张表的连接速度。而且,记录越多,其效果越加明显。

  所以,当表中有外键或者主键的时候,就最好为其建立索引。通过索引,可以强化主键与外键的作用,提高数据库的性能。

  铁律五:对于一些特殊的数据类型,不要建立索引

  在表中,有些字段比较特殊。如文本字段(TXT)、图像类型字段(IMAGE)等等。如果表中的字段属于这些数据类型,则最好不要为其建立索引。因为这些字段有一些共同的特点。如长度不确定,要么很长,几个字符;要么就是空字符串。如文本数据类型常在应用系统的数据库表中用来做备注的数据类型。有时候备注很长,但有时候又没有数据。若这种类型的字段上建立索引,那根本起不了作用。相反,还增加了系统的负担。

  所以,,在一些比较特殊的数据类型上,建立索引要谨慎。在通常情况下,没有必要为其建立索引。但是,也有特殊的情况。如有时候,在ERP系统中,有产品信息这个表,其中有个产品规格这个字段。有时候,其长度可能长达5000个字符。此时,只有文本型的数据类型可以容纳这么大的数据量。而且,在查询的时候,用户又喜欢通过规格这个参数来查询产品信息。此时,若不为这个字段建立索引的话,则查询的速度会很慢。遇到这种情况时,数据库管理员只有牺牲一点系统资源,为其建立索引。

  从这里也可以看出,虽然以上几条说的时铁律,但是,是否需要遵循,还是需要数据库管理员根据企业的实际情况,做出合理的选择。

  铁律六:索引可以跟Where语句的集合融为一体

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何利用Redis實現分散式事務管理 如何利用Redis實現分散式事務管理 Nov 07, 2023 pm 12:07 PM

如何利用Redis實現分散式事務管理引言:隨著網際網路的快速發展,分散式系統的使用越來越廣泛。在分散式系統中,事務管理是一項重要的挑戰。傳統的事務管理方式在分散式系統中難以實現,且效率低。而利用Redis的特性,我們可以輕鬆實現分散式事務管理,提高系統的效能和可靠性。一、Redis簡介Redis是一種基於記憶體的資料儲存系統,具有高效的讀寫效能和豐富的數據

如何安裝、解除安裝、重設Windows伺服器備份 如何安裝、解除安裝、重設Windows伺服器備份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer作業系統自帶的功能,旨在協助使用者保護重要資料和系統配置,並為中小型和企業級企業提供完整的備份和復原解決方案。只有執行Server2022及更高版本的使用者才能使用此功能。在本文中,我們將介紹如何安裝、解除安裝或重設WindowsServerBackup。如何重置Windows伺服器備份如果您的伺服器備份遇到問題,備份所需時間過長,或無法存取已儲存的文件,那麼您可以考慮重新設定WindowsServer備份設定。要重設Windows

oracle索引類型有哪些 oracle索引類型有哪些 Nov 16, 2023 am 09:59 AM

oracle索引類型有:1、B-Tree索引;2、位圖索引;3、函數索引;4、雜湊索引;5、反向鍵索引;6、局部索引;7、全域索引;8、網域索引;9、位圖連接索引;10、複合索引。詳細介紹:1、B-Tree索引,是一種自平衡的、可以有效率地支援並發操作的樹狀資料結構,在Oracle資料庫中,B-Tree索引是最常用的一種索引類型;2、位圖索引,是一種基於點陣圖演算法的索引類型等等。

如何實現Java中的學生成績管理功能? 如何實現Java中的學生成績管理功能? Nov 04, 2023 pm 12:00 PM

如何實現Java中的學生成績管理功能?在現代教育系統中,學生成績管理是一項非常重要的任務。透過對學生成績的管理,學校能夠更好地監測學生的學習進度、了解他們的弱點和優勢,並根據這些資訊做出更有針對性的教學計劃。在這篇文章中,我們將討論如何使用Java程式語言來實現學生成績管理功能。首先,我們需要確定學生成績的資料結構。通常,學生成績可以被表示為一個包含學生訊息

win10右鍵選單管理打不開怎麼辦 win10右鍵選單管理打不開怎麼辦 Jan 04, 2024 pm 07:07 PM

我們在使用win10系統的時候,使用滑鼠去右鍵桌面或是右鍵選單的時候,發現選單等都打不開,無法正常的去使用電腦了,這時候就需要恢復系統來解決問題。 win10右鍵選單管理打不開:1、先開啟我們的控制面板,然後點選。 2、然後點選安全性和維護下的。 3.再點擊右側的來恢復系統即可。 4.如果還是無法使用,是看是否是滑鼠本身出了問題。 5.如果確定滑鼠沒有問題的話,按下+,輸入。 6.執行完畢後,重啟電腦即可。

Windows Server 2025預覽版迎來更新,微軟改善Insiders測試體驗 Windows Server 2025預覽版迎來更新,微軟改善Insiders測試體驗 Feb 19, 2024 pm 02:36 PM

在發布WindowsServer的build26040版本之際,微軟公佈了該產品的官方名稱:WindowsServer2025。一同推出的,還有Windows11WindowsInsiderCanaryChannel版本的build26040。有些朋友可能還記得,多年前有人成功將WindowsNT從工作站模式轉換為伺服器模式,顯示微軟作業系統各版本之間的共通性。儘管現在微軟的伺服器作業系統版本和Windows11之間有明顯區別,但關注細節的人可能會好奇:為什麼WindowsServer更新了品牌,

Oracle資料庫中主目錄的作用與管理方式探究 Oracle資料庫中主目錄的作用與管理方式探究 Mar 07, 2024 pm 02:27 PM

Oracle資料庫中主目錄的作用和管理方式探究在Oracle資料庫中,主目錄(MasterDirectory)是一個重要的對象,它的主要作用是用於指定Oracle資料庫中所有資料檔案和控製檔案的預設儲存位置。透過設定主目錄,可以方便地管理資料庫檔案的儲存和訪問,提高資料庫的效能和安全性。主目錄可以透過以下方式管理:1.建立主目錄要建立一個主目錄,可以

如何對磁碟進行分割管理 如何對磁碟進行分割管理 Feb 25, 2024 pm 03:33 PM

磁碟管理怎麼分割區隨著電腦科技的不斷發展,磁碟管理也成為了我們電腦使用過程中不可或缺的一部分。而磁碟分割作為磁碟管理的重要環節,它可以將一個硬碟劃分為多個部分,使得我們能夠更有彈性地儲存和管理資料。那麼,磁碟管理怎麼分割區呢?下面,我將給大家詳細介紹。首先,我們需要明確一點,磁碟分割區並非只有一種分法,根據不同的需求和目的,我們可以靈活地選擇合適的磁碟分割方式。常

See all articles