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

2022-02-01 03:21:51 字數 4049 閱讀 6892

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

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

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

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

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

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

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

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

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

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

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

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

吐槽完畢,正文開始:

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

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

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

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

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

幾個比較重要的知識點:

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

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

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

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

4、什麼是字首索引:

新華字典中的「部首檢字表」的使用方法。首先我們先確認要查詢這個字的部首是什麼,然後看部首外的字筆畫是多少,然後查詢相應的字。同樣對於資料庫表而言,索引中關鍵字的值可以是索引「關鍵字的一部分,這種索引成為"字首索引"。例如我可以給使用者表中姓名表建立字首索引。統計姓名中姓張的人數、姓李的人數。

5、索引可以是字段的組合嗎?

對資料庫而言,索引可以是字段的組合。資料庫表中的某個索引如果有多個關鍵字構成,此時該索引被稱為復合索引。無論索引是乙個字段、還是幾個欄位的組合。這些字段必須來自同一張表,比昂切關鍵字的值必須是表中相應字段值的copy,。

6、不能跨表建立索引。

7、索引資料需要額外的儲存空間嗎?

這個問題很扯淡,比如想讓牛跑的好,又想讓牛不吃草。索引檔案肯定佔儲存空間了。對於資料庫表的索引而言,索引關鍵字經過排序後放在外存中。對於myisam資料庫表而言,索引存放在外存myi索引檔案中。對於innodb儲存引擎而言,索引資料存放在外存innodb表空間檔案中(可能是共享表空間檔案,也可能是獨享表空間檔案)。為了提公升資料的檢索效率,無論myisam表的索引還是,innodb的索引,索引的關鍵字經過公升序排序後放在外存中。

8、表中那些字段適合選作表的索引?什麼事主索引,什麼是聚簇索引?

對於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   索引名      普通索引

index  complex_index(price,publish_time)復合索引

本文大部分內容,摘錄於《mysql核心技術與最佳實踐》,有興趣的朋友可以買這本書看,寫的真是很不錯。

mysql資料庫學習筆記(四) 屬性

一 通過命令 備份資料 通過cmd mysqldump uroot p密碼 需要備份的資料庫名 備份後的sql指令碼名 還原資料 首先進入mysql環境 建立乙個庫 在庫下還原資料 通過命令 source 備份的資料庫指令碼 二 通過sqlyog 選中需要備份的資料庫 右鍵 備份 匯出 轉儲到sql...

MySQL資料庫學習筆記

一 資料庫介紹 1 為什麼需要資料庫 記憶體掉電後資料丟失,計算機的資源有限,因此需要把程式中用的資料儲存下來以便於關機後還能繼續使用 資料持久化 而儲存資料最簡單的方法就是把資料以檔案形式寫入到磁碟中。隨著程式的功能越來越複雜,需要操作的數量也就是越來越來大,管理資料就成了很大的問題,因為讀寫檔案...

MySQL實戰筆記(四)資料庫索引

索引的出現其實就是為了提高資料查詢的效率你,就像書的目錄一樣。一本500頁的書,如果你想找到其中的某個知識點,在沒有目錄的情況下,需要找好久。同樣,對於資料庫的表而言,索引其實就是它的目錄。索引的出現是為了提高查詢效率,但是實現索引的方式和資料結構有多種,先學習其中的三種,它們分別是雜湊表 有序陣列...