首頁  >  文章  >  資料庫  >  Mysql學習筆記(四)聊聊資料庫索引

Mysql學習筆記(四)聊聊資料庫索引

黄舟
黄舟原創
2016-12-21 16:43:50994瀏覽

小心情(可直接跳到分割線後)

今天心情好多了。一些濃厚的化不開的壞情緒,也漸漸的在晚上解決掉一個複雜的邏輯問題後,漸漸消散了。

今天中午去吃飯的時候,坤哥漫不經心的說:'我這麼多年終於悟出了一個道理,人年輕的時候不要那麼拼命,都沒有時間做其他事情了'

我問什麼其他事情,坤哥看了我一眼,又繼續漫不經心的說,那麼忙,都沒有時間談戀愛了。

我想不那麼拼命可以嘛?房價每年都漲,生活的成本與日俱增。如果不努力讓自己的價值所賺取的金錢,超過經濟成長。那麼只能繼續成為一個社會底層的loser,繼續在青春的美好時光,生活在痛苦之中。

唯有努力而已,努力太不夠了,拼命的才夠,才能與別人的比拼中,占得一點先機。

那麼努力,很痛苦的,生活也很單調。這樣的生活,又有那個女孩喜歡呢?

我想近半年來,我的情緒智商、人際交往能力有所下降就與我將全部身心,放在程式設計上有關。

我本來想用這些話,去和坤哥去聊聊的,但話終於噎在喉嚨間,沒有去說。

每個人都有自己要走的路,或孤獨或熱鬧,都是自己選的。

你在選擇一條道路的時候,必須去拋棄很多東西。

我願意得到,所以更能下的狠心失去。

 吐槽完畢,正文開始:

 什麼事索引呢?容易被專業名詞忽悠的同學請自覺百度看通俗解釋:檢尋圖書資料的一種工具。將書刊中的內容或項目分類摘錄,標明頁數,依一定次序排列,附在一書之後,或單獨編印成冊,以便讀者查閱。舊稱通檢或備檢。也稱引得。

《MySQL核心技術與最佳實踐》這一個章節講的太棒了,所以今天的內容絕大多數都是提煉總結書中的。

用更簡單的方式理解索引:索引就是新華字典前面的按拼音、按部首查字的那部分。

生活中,查一個生僻字,如果不知道讀音,也不借助與筆畫查找,恐怕很難查得到吧,如果讓機器去做這件事,那就是查閱整本字典的所有字,匹配後返回。這就造成了全表掃描,效率很低。

但是我們透過部首去找,然後透過筆畫,可能查閱的資料量很小,讓機器去做,只掃描相關資料項就好了,速度很快。

因此查詢速度的快慢,和數據量的大小沒有絕對關係,查詢速度取決於取出所需的數據,掃描了多少條表數據。他們的比值越小,效率越高。

幾個比較重要的知識點:

1、MySQL在檢索表中的資料時,先按照索引「關鍵字」的值在索引中進行查找,如果能夠查找的到,則可以直接定位到起始頁,如果沒有,則全表掃描。

 聽著《忘記他》劉惜君的歌,開始總結以下的內容。

2、索引其實就是資料庫表中欄位值的複製,改字段稱為索引的關鍵字。

3、一張資料表可以建立多個索引。

4、什麼是前綴索引:

    新華字典中的「部首檢字表」的使用方法。首先我們先確認要找這個字的部首是什麼,然後看部首外的字筆畫是多少,然後找出對應的字。同樣對於資料庫表而言,索引中關鍵字的值可以是索引「關鍵字的一部分,這種索引成為"前綴索引"。例如我可以給用戶表中姓名表建立前綴索引。統計姓名中姓張的人數、姓李的人數。此索引稱為複合索引。 、不能跨表建立索引。 。空間文件中(可能是共享表空間文件,也可能是獨享表空間文件)。中。

   對於MyISAM表而言,MySQL會自動的將表中所有記錄主鍵值的備份以及每筆記錄所在的起始頁編入索引中。像部首檢字表一樣產生一張「索引表」存放在外存中,這種索引稱為主索引(primary key)。 MyISAM表的MYI索引文件,與MYD資料檔案位於兩個文件。透過MYI索引檔案中的“表格記錄指標”,可以找到MYD資料檔案中表格記錄所在的實體位址。

Innodb表的「主索引」與MyISAM表的主索引不同。 InnoDB表的主索引關鍵字的順序與InnoDB表記錄主鍵值的順序一致。這種索引就稱為“叢集索引”,且每個資料表只能擁有一個叢集索引。

9、索引與資料結構是什麼關係?

   資料庫中的所以關鍵字在索引檔案中儲存規則十分複雜。為了有效的提高資料庫檢索效率。索引通常使用平衡樹(btree)或哈希表等複雜的資料結構進行「編排」。在操作資料庫的時候,底層操作正在執行這種複雜的運算,但我們是感覺不到的。

10、索引越多越好嗎?

   如果索引過多,在更新資料(新增、修改、刪除)時,除了需要修改表中的資料外,還需要對該表的所有索引進行維護,以維持表格欄位值和索引關鍵字值的一致性。反而降低了數據的更新速度。

   實踐表名,當修改表記錄的作業特別頻繁時,過多的索引會導致硬碟I/O次數明顯增加,反而會明顯的降低伺服器效能。甚至可能會導致宕機。

11、索引關鍵字的選取原則。

    原則1、表中的某字段離散度越高,此字段越適合作為選作索引的關鍵字。

    資料庫使用者在建立主鍵約束的同時,MySQL會自動的建立主索引(primary index)且索引名稱為primary ;在建立唯一約束的同時,MySQL會自動建立唯一性約束(unique index)預設情況下,索引名為唯一約束性約束的欄位名稱。

    原則2、佔用儲存空間少的欄位較適合選取索引的關鍵字。

    原則3、儲存空間固定的欄位更適合選為索引的關鍵字。

    原則4、 where字句中常用的欄位應該建立索引,分組欄位或排序欄位應該建立索引,兩個資料表的連結欄位應該建立索引。

      昨晚,遲遲不能入眠。瀏覽空間的時候,得知朋友要離婚了。她是我大學喜歡的女孩子,當初因為任性等原因,相處了很短一段時間,就分開了。結婚才一年時間,也有了孩子。心突然很心痛,幻想能回到從前。那個星星掛滿天空的夜晚,我倔強而任性,她熱烈而芬芳。算了,還是不要為這些事傷心了,凡人必有命。我還是好好的碼代碼吧。

   引入索引的目的是為了提高檢索的效率,因此索引關鍵字的選擇與select語句息息相關。這句話有兩方面的意義,select語句的設計可以決定索引的設計;索引的設計也同樣影響select的設計。 select語句中的where字句、group by 字句,以及order by字句,又可以影響索引的設計。兩個表的連結欄位應該建立索引,外鍵約束一經創建,mysql便會自動地建立與外鍵相對應的索引,這是由於外鍵欄位通常是兩個表的連接欄位。

    原則5、更新頻繁的欄位不適合建立索引,不會出現在where字句中的欄位不應該建立索引。

    原則6、最左字首的原則。

    複合索引還有另一個有點,他透過被稱為「最左前綴」(leftmost prefixing)的概念體現出來,假設向一個表格的多個欄位(例如firstName ,lastName、address)建立複合索引(索引名:firstname_lastname_address)。當where查詢的條件是以下各種欄位的組合時,mysql將使用fname_lastname_address索引。其他情況將無法使用          fname_lastname_address索引。

firstname,lastname,address

firstname,;lastname

firstname

   原則7、盡量使用前綴索引。

    僅在姓名中的姓氏部分建立索引,從而可以節省索引的儲存空間,提高檢索效率。

    與資料庫的設計一樣,索引的設計同樣需要資料庫開發人員經驗的積累,以及智慧的沉澱,同時需要依據系統各自的特點設計出更好的索引,在「加快檢索效率」與「降低更新速度」之間做好平衡。從而大幅提升資料庫的整體效能。

    

索引與約束關係:

      mysql中的索引與限制條件的關係是怎樣的。約束分為主鍵約束、唯一性約束、預設值約束、檢查約束、非空約束、以及外鍵約束。其中主鍵約束、唯一性約束、外鍵約束與索引的關係較為緊密。

      約束主要用於確保業務邏輯作業資料庫時資料庫的完整性。

     而索引則是將關鍵字資料以某種資料結構(如btree,及二元樹,雜湊等)儲存到外存,用於提升資料的檢索效能。

     限制是邏輯層面的概念,而索引既有邏輯上的概念,更是一種實體儲存方式,且事實存在,需要耗費一定的儲存空間。

     unqiue index   索引名 唯一索引

     index   索引名      於《MySQL核心科技與最佳實務》,有興趣的朋友可以買這本書看,寫的真是很不錯。

     

 以上就是Mysql學習筆記(四)聊聊資料庫索引的內容,更多相關內容請關注PHP中文網(www.php.cn)! 

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