1. 程式人生 > >這些Mysql基礎設計思路以及優化思路我都給你總結好了

這些Mysql基礎設計思路以及優化思路我都給你總結好了

%s mit 標記 總結 業務 增加 二叉 索引 基礎

1、定長和不定長要區分開

  2、不常用的列和常用的列分開存

  3、增加冗余,反範式化

  4、btree索引,就是用樹形結構存儲在磁盤上,其中操作是用2分發,找一個中間點,然後把大比這個大的分在一邊,小的放在一邊,然後當你查詢的時候,從數字頭開始,大小分開找,這個適合區間查找,不適合一個一個找

  5、hash索引,就是當你存儲在硬盤的數據,先給你一個地址,然後你下次來找的時候直接用那個地址找到那個值,這個適合一個值的查找,不適合區間查詢,比如where id=1這種

  6、(1)limit 的優化,能用業務邏輯解決的就用業務邏輯解決(比如百度的搜索只是顯示76頁)

  (2)往索引上靠,比如id>1100這種,你用到了id的hash主鍵索引(默認)

  (3)inner join

  7、數據庫的索引都是以二叉樹進行儲存的,聚簇索引其實就是樹的節點下面包含了這個節點的其他數據項,但是非聚簇索引只是一個標記,然後還要回行到磁盤去找到相應的數據項值,還要聚簇索引的二級索引只是一種引用,也就是二級索引下面存儲的是一級索引的id,然後二級索引通過id去樹上找到相應的數據項。

  非聚簇索引比如myisam存儲引擎,索引和數據是存在不同的地方。找找到索引然後再找到數據.

  聚簇索引就是那個存儲數據的節點,及包含索引,然後在索引下面還存有它相應的其他數據---innodb

  8、索引會占據很大的磁盤空間,然後數據的變更也會操作索引

  9、組合索引的核心思想是左半邊原則,當你的最後一個條件產生like這種之後就會導致後面的用不到

  select * from test where id = 1 and name = "aa" and text like "%sss" and desc = "1";

  就會導致你後面的desc就用不到了索引

  10、hash的思想是跳出時間和空間復雜度,但是它需要一個散列度好的函數,空隙正好,然後還不能沖突

  11、innodb即使你插入的數據是亂序的,但是你查出來之後還是整理好的順序,因為它可以按照數的索引依次返回數據,這也是聚蔟索引的一個優勢

  固態硬盤支持隨機讀取,而不用像傳統磁盤那樣按照順序轉圈的讀取

這些Mysql基礎設計思路以及優化思路我都給你總結好了