sql索引優化

2021-08-09 13:31:09 字數 1533 閱讀 6538

1、b_tree索引:

b-tree索引的特點:

以b+樹的結構儲存資料

能加快資料的查詢速度

更適合進行範圍查詢

什麼情況下可以用到b樹索引:

1、全值匹配的查詢: eg sn='1111-1111-1111-1111'

2、匹配最左字首的查詢: eg: sn ="1111-.."

3、匹配範圍值的查詢: eg:sn>.. sn < ..

4、只訪問建立了索引的列

5、order_by語句

6、精確匹配左前列並範圍匹配另外一列(聯合索引)

btree索引的使用限制:

1、如果不是按照索引最左列開始查詢,則無法使用索引(聯合索引,左邊的是就是最左列),如:有個

訂單號和訂單日期的聯合索引,如果順序先是訂單號,然後再是訂單日期,則訂單號是最左列,那此時如果

只將訂單日期作為查詢條件,則不會走索引

2、使用索引時不能跳過索引中的列: 如:有個訂單日期、訂單人姓名和訂單人**組成的聯合索引,如果查詢

的過程中只包含了訂單日期和訂單人的**,則不會走索引

3、not in 和 <> 操作無法使用索引

4、如果查詢中有某個列的範圍查詢,則其右邊所有列都無法使用索引

2、hash索引:

hash索引的特點:

hash索引是基於hash表實現的,只有查詢條件精確匹配,hash索引中的所有列,才能使用到hash索引

對應hash索引中的所有列,儲存引擎都會為每一行計算乙個hash碼,hash索引中儲存的就是hash碼

hash索引的限制:

hash索引必須進行二次查詢

hash索引無法用於排序

hash索引不支援部分索引查詢也不支援範圍查詢

hash索引中hash碼的計算可能存在hash衝突

3、索引的利弊:

1、索引大大減少了儲存引擎需要掃瞄的資料量

2、索引可以幫助我們進行排序以避免使用臨時表

3、索引可以把隨機io改為順序io

4、索引不是越多越好

5、索引會增加寫操作的成本

6、太多的所有會增加查詢優化器的選擇時間

資料庫結構優化的目的:

1、減少資料冗餘

2、盡量避免資料維護中出現更新,插入和刪除異常

插入異常:如果表中的某個實體隨著另乙個實體而存在

更新異常:如果更改表中的某個實體的單獨屬性,會進行多行更新

刪除異常:如果刪除某乙個實體導致其他實體消失

資料庫結構設計的步驟:

1、需求分析

2、儲存需求

3、資料處理需求

4、資料的安全性和完整性

資料庫設計正規化:

1、資料庫表中的所有欄位都只具有單一屬性

2、單一屬性的列是由基本的資料型別所構成的

3、二維表

SQL優化 索引優化

一 發現哪些sql語句有效能問題 開啟mysql慢查詢日誌對sql語句進行監控 show variables like slow query log 檢視是否開啟慢查詢日誌 set global slow query log on 開啟慢查詢日誌 set global log queries not...

SQL優化(SQL 索引)

檢視表定義 show create table users 檢視表的索引 show index from users 你要獲取第乙個表的所有資訊,你說全表掃瞄快呢還是索引掃瞄快呢?所以當你查詢庫 包括left join中的臨時庫 的所有資訊時,資料庫會選擇最優方法 全表掃瞄!s表dept id na...

SQL優化 索引

索引說白了其實就是一種用於快速查詢資料的資料結構。像我在之前的工作裡mysql資料庫用的比較多一些,我了解的mysql底層索引使用的資料結構是b tree。你像b tree它其實就是在b tree的基礎上優化而來的,b tree和b tree最大的區別就是b tree不管是葉子節點還是非葉子節點除了...