索引是一種特殊的檔案(innodb資料表上的索引是表空間的乙個組成部分),它們包含著對資料表裡所有記錄的引用指標。
更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度
索引的目的在於提高查詢效率,可以模擬字典,如果要查「mysql」這個單詞,我們肯定需要定位到m字母,然後從下往下找到y字母,再找到剩下的sql。如果沒有索引,那麼你可能需要把所有單詞看一遍才能找到你想要的.
除了詞典,生活中隨處可見索引的例子,如火車站的車次表、圖書的目錄等。它們的原理都是一樣的,通過不斷的縮小想要獲得資料的範圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是我們總是通過同一種查詢方式來鎖定資料。
資料庫也是一樣,但顯然要複雜許多,因為不僅面臨著等值查詢,還有範圍查詢(>、<、between、in)、模糊查詢(like)、並集查詢(or)等等。資料庫應該選擇怎麼樣的方式來應對所有的問題呢?我們回想字典的例子,能不能把資料分成段,然後分段查詢呢?最簡單的如果1000條資料,1到100分成第一段,101到200分成第二段,201到300分成第三段……這樣查第250條資料,只要找第三段就可以了,一下子去除了90%的無效資料。
索引相關操作 提高查詢的效率
show
index
from 表名;
-- 如果指定欄位是字串,需要指定長度,建議長度與定義欄位時的長度一致
-- 字段型別如果不是字串,可以不填寫長度部分
create
index 索引名稱 on 表名(欄位名稱(長度)
)alter
table 表名 add
index 索引名稱(欄位名稱(長度)
)
drop
index 索引名稱 on 表名;
常用的索引有三種主鍵索引、普通索引和唯一索引
索引不是越多越好,哪些字段需要建索引呢?主鍵百分之百用到了索引,就是主鍵索引;(當你在乙個表中設定了主鍵或者外來鍵的時候,mysql會預設給他加上索引,所以使用主鍵或外來鍵進行查詢操作的時候會非常的快,但是實際使用中對主鍵或者外來鍵的直接使用是比較少的)
create
index 索引名稱 on 表名(欄位名稱(長度)
)alter
table 表名 add
index 索引名稱(欄位名稱(長度)
)
唯一索引,unique
,保證這個欄位中的資料不會重複,如:乙個字段記錄了身份證號,此時就可以給他加上唯一索引保證資料不會重複;
create
unique
index 索引名稱 on 表名(欄位名稱(長度)
)方式二:
alter
table 表名 add
unique
index 索引名稱(欄位名稱(長度)
)
mysql高階索引 Mysql高階 索引優化全解
是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...
MySQL高階設計之四 索引
一 索引的型別 b tree索引的特點 1 以b 樹結構儲存資料 2 加快資料的查詢速度 3 更適合範圍查詢 使用場景 1 全治匹配的查詢 order sn 11111111 2 匹配最左字首的查詢 3 匹配列字首查詢 如 order sn like 22222 4 匹配範圍值的查詢 order s...
mysql高階 索引
mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...