mysql索引 B+tree
阿新 • • 發佈:2018-11-04
一、B+tree示意圖
二、為什麼要用索引
1、索引能極大減少儲存引擎需要掃描的資料量:因為索引有序所以可以快速查詢並且不用全表查詢;
2、索引可以把隨機IO變為順序IO:因為B+tree在資料中儲存了下個數據的資訊;
3、索引在分組、排序等操作時,不使用臨時表。
三、sql資料庫優化
1、索引列數資料長度能少則少:資料也是分片的,一次可以載入回更多資料,減少磁碟io;
2、索引不是越多越好,越全越好:只要設計索引欄位修改、插入就需要調整B+tree,會降低寫效率;
3、匹配列字首可用到索引:如 like 9999%可以利用索引,但%9999%用不到索引,因為用的是tree所以前邊%不知道該往那個方向遍歷;
4、where條件中 not in 和 <>操作無法使用索引:原因如3;
5、匹配範圍值 order by 、group by也可用到索引:因為B+tree為有序儲存在資料中儲存了下個數據的資訊;
6、少用select *,應該指定列:因為B+tree所有資料地址都在最末一層如果需要所有資料必須找到最末層才能拿到,如果你要返回的欄位正好是索引欄位那隻要遍歷key(關鍵字)即可;
7、索引列不能使用表示式或函式:原因如3;
8、對於過長字串建立索引可以通過建立字首索引,注意字首需要選擇好的離散型:就是指對資料的一部分建立索引;
9、聯合索引中如果不是按照索引最左列開始查詢,無法使用索引;
10、聯合索引中精確匹配最左列並範圍匹配另外一列可以用到索引;
11、聯合索引中如果查詢中有某個列的範圍查詢,則其右邊的所有列都無法使用索引。