MySQL中索引與算法

MYSQL索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹的形式保存。如果沒有索引,執行查詢時MySQL必須從第一個記錄開始掃描整個表的所有記錄,直至找到符合要求的記錄。表裏面的記錄數量越多,這個操作的代價就越高。如果作爲搜索條件的列上已經創建了索引,MySQL無需掃描任何記錄即可迅速得到目標記錄所在的位置。如果表有1000個記錄,通過索引查找記錄至少要比順序掃描記錄快100倍。
在使用like的時候,如果使用‘%%’,會不會用到索引呢?

EXPLAIN SELECT * FROM `user` WHERE username LIKE 'ptd_%';

綜上,mysql在使用like查詢的時候只有使用後面的%時,纔會使用到索引。

INDEX:普通的索引。
PRIMARY 主鍵:唯一且不能爲空。
UNIQUE 唯一索引:不允許有重複。
FULLTEXT 全文索引:用於在一篇文章中,檢索文本信息的。

MYSQL的索引類型:INDEX,PRIMARY, UNIQUE,FULLTEXT有什麼區別?各適用於什麼場合?
舉個例子來說,比如你在爲某商場做一個會員卡的系統。
這個系統有一個會員表
有下列字段:
會員編號 INT
會員姓名 VARCHAR(10)
會員身份證號碼 VARCHAR(18)
會員電話 VARCHAR(10)
會員住址 VARCHAR(50)
會員備註信息 TEXT

那麼這個 會員編號,作爲主鍵,使用 PRIMARY
會員姓名 如果要建索引的話,那麼就是普通的 INDEX
會員身份證號碼 如果要建索引的話,那麼可以選擇 UNIQUE (唯一的,不允許重複)
會員備註信息 , 如果需要建索引的話,可以選擇 FULLTEXT,全文搜索。
不過 FULLTEXT 用於搜索很長一篇文章的時候,效果最好。
用在比較短的文本,如果就一兩行字的,普通的 INDEX 也可以。
MySQL從3.23.23版開始支持全文索引和全文檢索。在MySQL中,全文索引的索引類型爲FULLTEXT。全文索引可以在CHAR、VARCHAR或者TEXT類型的列上創建。
它可以通過CREATE TABLE命令創建,也可以通過ALTER TABLE或CREATE INDEX命令創建。對於大規模的數據集,通過ALTER TABLE(或者CREATE INDEX)命令創建
全文索引要比把記錄插入帶有全文索引的空表更快。

我們在MySQL中常用兩種索引算法BTree和Hash,兩種算法檢索方式不一樣,對查詢的作用也不一樣。
BTree索引是最常用的mysql數據庫索引算法,因爲它不僅可以被用在=,>,>=,<,<=和between這些比較操作符上,而且還可以用於like操作符,只要它的查詢條件是一個不以通配符開頭的常量。

Hash索引只能用於對等比較,例如“=”,“IN”,“<=>”(等價於=)操作符。由於是一次定位數據,不像BTree索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次IO訪問,所以檢索效率遠高於BTree索引,但Hash索引僅僅能滿足“=”,“IN”,“<=>”查詢,不能使用範圍查詢。
更多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章