mysql两种索引结构_19.Mysql索引结构及常见索引的区别
轉載出:http://blog.csdn.net/qq_19557947/article/details/76951912
一、Mysql索引主要有兩種結構:B+Tree索引和Hash索引
Hash索引
mysql中,只有Memory(Memory表只存在內存中,斷電會消失,適用于臨時表)存儲引擎顯示支持Hash索引,是Memory表的默認索引類型,盡管Memory表也可以使用B+Tree索引。Hash索引把數據以hash形式組織起來,因此當查找某一條記錄的時候,速度非常快。但是因為hash結構,每個鍵只對應一個值,而且是散列的方式分布。所以它并不支持范圍查找和排序等功能。
B+Tree索引
B+Tree是mysql使用最頻繁的一個索引數據結構,是Inodb和Myisam存儲引擎模式的索引類型。相對Hash索引,B+Tree在查找單條記錄的速度比不上Hash索引,但是因為更適合排序等操作,所以它更受歡迎。畢竟不可能只對數據庫進行單條記錄的操作。
帶順序訪問指針的B+Tree
B+Tree所有索引數據都在葉子節點上,并且增加了順序訪問指針,每個葉子節點都有指向相鄰葉子節點的指針。
這樣做是為了提高區間效率,例如查詢key為從18到49的所有數據記錄,當找到18后,只要順著節點和指針順序遍歷就可以以此向訪問到所有數據節點,極大提高了區間查詢效率。
大大減少磁盤I/O讀取
數據庫系統的設計者巧妙利用了磁盤預讀原理,將一個節點的大小設為等于一個頁,這樣每個節點需要一次I/O就可以完全載入。
二、選擇索引的數據類型
Mysql支持很多數據類型,選擇合適的數據類型存儲數據對性能有很大的影響。
(1)越小的數據類型通常更好:越小的數據類型通常在磁盤、內存和cpu緩存中都需要更少的空間,處理起來更快。
(2)簡單的數據類型更好:整形數據比起字符,處理開銷更小,因為字符串的比較更復雜。在MySQL中,應用內置的日期和時間數據類型,而不是字符串來存儲時間;以及用整形數據存儲IP地址。
(3)盡量避免NULL:應該制定列為NOT NULL,除非你想存儲NULL。在MySQL中,含有空值的列很難進行查詢優化,因為他們使得索引、索引的統計信息以及比較運算更加復雜。
三、MySQL常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引
1,INDEX(普通索引):ALTER TABLE 'table_name' ADD INDEX index_name('col')
最基本的索引,沒有任何限制
2,UNIQUE(唯一索引):ALTER TABLE 'table_name' ADD UNIQUE('col')
與“普通索引”類似,不同的就是:索引列的值必須唯一,但允許有空值。
3,PRIMARY KEY(主鍵索引):ALTER TABLE 'table_name' ADD PRIMARY KEY('col')
是一種特殊的唯一索引,不允許有空值。
4,FULLTEXT(全文索引):ALTER TABLE 'table_name' ADD FULLTEXT('col')
僅可用于MyISAM和InoDB,針對較大的數據,生成全文索引很耗時耗空間
組合索引:ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3')
為了更多的提高mysql效率可建立組合索引,遵循“最左前綴”原則。創建復合索引應該將最常用(頻率)做限制條件的列放在最左邊,依次遞減。組合索引最左字段用in是可以用到索引的。相當于建立了col1,col1col2,col1col2col3三個索引
四,索引使用注意事項
1,不要濫用索引
①,索引提高查詢速度,卻會降低更新表的速度,因為更新表時,mysql不僅要更新數據,保存數據,還要更新索引,保存索引
②,索引會占用磁盤空間
2,索引不會包含含有NULL值的列
復合索引只要有一列含有NULL值,那么這一列對于此符合索引就是無效的,因此我們在設計數據庫設計時不要讓字段的默認值為NULL。
3,MySQL查詢只是用一個索引
如果where字句中使用了索引的話,那么order by中的列是不會使用索引的
4,like
like '%aaa%'不會使用索引而like "aaa%"可以使用索引
總結
以上是生活随笔為你收集整理的mysql两种索引结构_19.Mysql索引结构及常见索引的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是股票板块 股票板块的热点判断
- 下一篇: 贷款10万一年利息