<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # 索引 ## 定義 **索引**是幫助MySQL高效獲取數據的**排好序**的**數據結構** ## 索引分類 索引類型|區別 ---|--- 普通索引|簡單索引,數據可以為空 主鍵索引|主鍵索引。索引列唯一且不能為空;一張表只能有一個主鍵索引 唯一索引|數據必須是唯一的,但可以為空 聯合索引|多個列聯合到一起建立的索引,使用時有最左原則需要注意 全文索引|全文搜索的索引。用于搜索很長一篇文章的時候,效果最好。用在比較短的文本,如果就一兩行字的,普通的 INDEX 也可以。 ## 索引的數據類型 `B+tree`、`hash` ### 為什么沒有用`二叉樹` #### 二叉樹的定義 [二叉樹]() 如果選擇二叉樹做索引的話假如說在主鍵建立索引,因為索引一般都是主鍵自增的,那就不會往樹的左節點做插入,那索引樹就會降級成為單向鏈表,如下圖所示: ![](https://raw.githubusercontent.com/shiwenyuan/pic/master/BinaryTree.gif) 原始二叉樹的查找`時間復雜度`是`O(1)`, 降級成為單向鏈表后的時間復雜度是`O(n)` ### 為什么沒有選擇`紅黑樹` 紅黑樹是一種含有紅黑結點并能自平衡的二叉查找樹。 雖然它能夠自平衡,但是樹的高度不可控,假如樹高20 那就需要查詢20次。也就是20次磁盤IO,如果數據量大的情況下,紅黑樹也是搞不定的。 ### 為什么沒有用`BTree` 在計算機科學中,B樹(英語:B-tree)是一種自平衡的樹(多叉平衡樹),能夠保持數據有序。這種數據結構能夠讓查找數據、順序訪問、插入數據及刪除的動作,都在對數時間內完成。B樹,概括來說是一個一般化的二叉查找樹(binary search tree)一個節點可以擁有2個以上的子節點。與自平衡二叉查找樹不同,B樹適用于讀寫相對大的數據塊的存儲系統,例如磁盤。B樹減少定位記錄時所經歷的中間過程,從而加快存取速度。B樹這種數據結構可以用來描述外部存儲。這種數據結構常被應用在數據庫和文件系統的實現上。 ![](https://raw.githubusercontent.com/shiwenyuan/pic/master/20200422122501.png) 節點元素從左到右依次遞增排列 子節點所有元素都在父節點區間內 沒有選擇B樹的原因是因為B樹的data是跟隨每個子節點的而B+tree的的數據和節點是分開存放的數據存放在非葉子節點上 這樣數據可以再有限的內存空間里面去維護更多的index ## B+tree B+tree數據格式 ![](https://raw.githubusercontent.com/shiwenyuan/pic/master/20200422124950.png) ## hash 查詢后經過hash運算可以快速獲取到某個具體數據的磁盤地址,理論上定向的條件查詢效率比較高,但是區間查詢就沒辦法用索引了,所以不推薦hash 每次查找都會把數據load到內存中,從而提高查詢效率 ## index創建 ALTER TABLE `table_name` ADD INDEX `index_name` (`column_list`); ```shell script ALTER TABLE user ADD INDEX index_name_city_age (NAME(16),CITY,AGE); ``` 等價于 CREATE UNIQUE INDEX `index_name` ON `table_name` (`column_list`) ```shell script CREATE INDEX user ON user (NAME(16),CITY,AGE) ``` ### 其他創建語句 #### 主鍵索引 alter table `table_name` add primary key (`columns`); #### 唯一索引 ALTER TABLE `table_name` ADD UNIQUE (`columns`); #### 全文索引 ALTER TABLE `table_name` ADD FULLTEXT (`columns`); ## index刪除 ### 普通索引刪除 DROP INDEX `index_name` ON `talbe_name` 等價于 ALTER TABLE `table_name` DROP INDEX `index_name` ### 主鍵索引刪除 ALTER TABLE `table_name` DROP `PRIMARY KEY` ## index查看 show index from `table_name`; ## mysql索引命中過程 @todo
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看