標籤:查詢條件 分組 多列 設計原則 資料庫 條件 mysql web技術 允許
1、索引的定義
索引是資料庫表中一列或多列的值進行的一種排序,用於快速找出在某一列中特定的值。
2、索引的原理
如果不使用索引,則通常的查詢資料中,需要對錶中資料做一一對應的比較,直到找出所有相關的行為止。也就是說,當資料庫表中資料量越大,則查詢效率越低;而索引則是迅速到達一個位置,查詢資料檔案,而不必查詢所有資料。簡單來講,索引即如目錄一樣,先找到對應的目錄,然後根據儲存在索引中的rowid,快速找到所需的對應資料。
3、索引的特點
a.優點:加快了查詢的速率,這是索引最重要的意義所在
加快了表與表之間的連結,特別是在資料的參照完整性方面(參照完整性是通過定義外鍵與之間的對應關係來實現的),有特別的意義
在使用分組和排序子句進行查詢時,也可以顯著減少查詢中分組和排序的時間
b.缺點:在建立和維護索引時,需要耗費時間,而且伴隨著數量的增加,其耗費的時間也在增加
索引需要佔據一定的磁碟空間。除了資料表佔據資料空間之外,每一個索引都要佔據一定的物理空間,當隨著資料量越來越大的時,索引所佔據的空間甚 至大於資料空間在對資料表進行增、刪、改的時候,索引也需要進行動態維護,這就增加了系統的負擔,降低了維護的速度。
4、索引的分類
a.普通索引和唯一索引
普通索引:允許資料表列中有空值和重複;
唯一索引:允許資料表列中有空值,但不許重複。主鍵是一種特殊的唯一索引,因為主鍵不許為空白;
寫法:create index 索引名 on 表 (欄位名)--------------普通索引
create unique index 索引名 on 表 (欄位名)-------唯一索引
b.單列索引和複合式索引
單例索引:一個索引只指定一個列,一個表中可以有多個單例索引
複合式索引(複合索引):一個索引列包含了表中多個欄位,最多可以包含16個欄位,只有在查詢條件中使用到左邊欄位時,複合式索引才會有效。複合式索引堅持一個原則,使用頻率越高的欄位,排在最前面。
寫法:create unique index 索引名 on 表 (欄位名1,欄位名2,...)----複合式索引
c.全文索引
全文索引類型為fulltext,在定義列的值上支援全文尋找,允許列插入重複或空值,全文索引可以在char、varchar、text、clob等類型的列上建立,其表現形式類似於like函數,而全文索引主要通過contains來實現。例如 select * from 表名 where contains((欄位1,欄位2),‘姚明‘)。另外,在MySQL中只有MyISAM儲存引擎支援全文索引
5、索引的設計原則
索引的設計是為了提高資料的查詢速率,但是如果不好的索引設計不僅會佔據大量的磁碟空間、還會對系統效能造成很大的影響。
1、資料量較少的資料庫表,不必添加索引。因為遍曆索引的時間可能比普通查詢的時間都要長,這時候的索引不會產生任何最佳化的效果。
2、經常進行增、刪、改的資料庫表,盡量少的添加索引。因為每一次對錶的DDL操作,在對錶資料做更改的同時,相應的索引也會進行更新和調整。
3、對於條件運算式中經常用到的欄位,但其不同值較少的欄位則沒必要添加索引。比如,在性別欄位,只有‘男’、‘女’,則沒必要添加索引,否則的話不僅會降低更新資料時候的效能,而且對查詢的時候也沒有任何效能上的提高。
4、在頻繁使用order by或group by的欄位上添加索引,如果是多個欄位的話,可以使用複合式索引。
5、當某個欄位有唯一性(unique)特徵時,可以使用唯一索引。不僅可以確保資料的完整性,也提高了查詢效能。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
正如 Firefox總裁Tristan Nitot 在解釋Firefox成功原因時,Tristan Nitot說:“在近6年的時間裡,Web技術不斷髮展的同時,瀏覽器卻並未有任何改善,因為微軟已經睡著了。”
而我也相信,如今的技術每天都在更新,如果我們今天睡著,明天我們就已經落後了。
我的每一句話都是自己手打,我不能保證每一句話的正確,但我保證每一個字都已經用心。------願我們一起進步
SQL索引--基礎理論