索引的原理(注意事項)
1:哪些列適合建立索引
較頻繁的作為查詢條件字段應該建立索引
select * from emp where empno = 1
唯一性太差的字段不適合單獨建立索引,即使頻繁作為查詢條件
select * from emp where *** = '男『 -->性別就男,女,二叉樹都是平級,就兩個資料,沒有意義
更新非常頻繁的字段不適合建立索引
select * from emp where logincount = 1
不會出現在where子句中欄位不該建立索
2:小結
1:肯定在where條件經常使用
2:該字段的內容不是唯一的幾個值(性別)
3:字段內容不是經常變化的(例如狀態字段)
4:建立索引檔案會占用磁碟
5:對dml語句(update,delete,insert)的效率有影響(變慢)
刪除編號11記錄後,索引11(@b-tree二叉樹原理圖)已將刪除後,二叉樹要重整,所以索引檔案要重組,速度變慢,但是**建設9成都是再做查詢操作,所以這點犧牲是值得的
3:注意問題
1:explain select * from dept where loc='aaa'\g 就不會使用到索引
2:對於使用like的查詢,查詢如果是 『%aaa』 不會使用到索引『aaa%』會使用到索引。
比如: explain select * from dept where dname like '%aaa'\g,不能使用索引,即,在like查詢時,關鍵的 『關鍵字』 , 最前面,不能使用 % 或者 _這樣的字元., 如果一定要前面有變化的值,則考慮使用 全文索引->sphinx.
3:如果條件中有or,即使其中有條件帶索引也不會使用。換言之,就是要求使用的所有字段,都必須建立索引, 我們建議大家盡量避免使用or 關鍵字
select * from dept where dname=』***』 or loc=』xx』 or deptno=45
4:如果列型別是字串,那一定要在條件中將資料使用引號引用起來。否則不使用索引。(新增時,字串必須』』), 也就是,如果列是字串型別,就一定要用 『』 把他包括起來.
5:如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引。
4:explain 分析
可以幫助我們在不真正執行某個sql語句時,就執行mysql怎樣執行,這樣利用我們去分析sql指令.
如何檢視索引使用的情況:
show status like 『handler_read%』;
handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數。
handler_read_rnd_next:這個值越高,說明查詢低效。
資料庫的索引原理和注意事項
索引的種類 1 普通索引 2 唯一索引 3 主鍵索引 4 對左匹配聯合索引 5 全文索引。也可以分為 聚簇索引與非聚簇索引 聚簇索引 葉節點 資料節點 直接找到資料,跟線性鍊錶類似 適合查詢,排序 非聚簇索引 葉節點 索引節點 資料塊 間接找到資料,跟非線性鍊錶類似 適合 1 某列常用於集合函式 如...
mysql索引注意事項
在查詢條件中必須有復合索引還中最左側的列 在建立多列索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊 假設你在表的state city和zip資料列上建立了復合索引。索引中的資料行按照state city zip次序排列,因此它們也會自動地按照state city和state次序排...
索引使用注意事項
1.索引不會包含有 null 值的列只要列中包含有 null 值都將不會被包含在索引中,復合索引中只要有一列含有 null 值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為 null 應該用 0 乙個特殊的值或者乙個空串代替空值。2.復合索引 比如有一條語句是這樣的...