存儲引擎
定義:
就是數據庫存儲數據的技術,能夠類比成發動機引擎,不一樣的引擎性能各不相同html
分類*****
最多見的兩個存儲引擎是innodb和myisam,區別以下:sql
一、innodb數據庫
--一、(默認版本是5.5及以上)數據結構
--二、支持事務函數
--三、不支持全文索引工具
--四、索引和數據在同一文件中,.ibdpost
表的結構是在.frm文件中性能
二、myisamurl
--一、(默認版本5.5如下,主要5.3用的人最多)spa
--二、不支持事務
--三、支持全文索引
--四、.frm:表結構
.MYD:表數據
.MYI:表索引
三、memory(不經常使用)
ps:innodb不支持全文索引
國內廣泛用的全文索引 sphinx(斯芬克斯)
索引
類比
至關於新華字典的目錄,咱們能夠把索引理解成一個特殊的文件,
若是沒有這個文件,查詢是從前日後查找數據的,
若是有這個文件,會按照一種特殊的數據結構(二叉樹)查找數據
做用
加快查詢的數據
分類
一、主鍵索引:加快查詢 + 不能重複 + 不能爲空 primary key
二、惟一索引:加快查詢 + 不能重複 unique(列名)
聯合惟一索引:加快查詢 + 不能重複 unique(列名1,列名2,..)
三、普通索引:加快查詢 index(列名)
建立及刪除
建立
一、建表時建立
create table t1( # 主鍵的建立 id int auto_increment primary key, name varchar(32) not null default '', age int not null default 0, num int not null default 0, # 聯合惟一索引的建立 unique uni_name_num (name,age), # 普通索引的建立 index ix_age (age) ).engine=innodb charset=utf8;
二、表存在後建立
# 主鍵索引的建立 alter table t1 change id id int auto_increment primary key # 惟一索引的建立 create unique index ix_name on t1(name) create unique index ix_name_age on t1(name,age) # 普通索引的建立 create index ix_age on t1(age)
刪除
# 若是主鍵是自增的,則沒法刪除,要先取消自增再刪除 alter table t1 change id id int; alter table t1 drop primary key; # 刪除惟一索引和普通索引同樣 drop index ix_name on t1;
索引的優缺點
優勢:
查詢數據速度快
缺點:
版本5.3如下:
刪除和修改數據的速度會變得很慢,會重構索引
版本5.5以上:
刪除和修改數據的速度不是特別慢
索引的使用
數據庫表中添加索引後確實會讓查詢速度起飛,但前提必須是正確的使用索引
來查詢,若是以錯誤的方式使用,則即便創建索引也不會生效
錯誤索引案例
# -like '%xx' select * from t1 where name like '%cn%'; # -使用函數 select * from t1 where reverse(name) = 'xxx'; # -order by select email from t1 order by name desc; # 當根據索引排序時,選擇的映射若是不是索引,則不走索引 # 特別的:若是對主鍵排序,則仍是走索引 select * from t1 order by id;
explain 工具
查看sql語句是否用得上索引,或者查看sql執行效率的工具
給執行的sql語句出一個報告,經過此報告來判斷sql語句的
執行效率和效果(不必定都按結果上來)
SQL語句的規則
一、不建議使用like進行搜索
二、不建議使用函數
三、組合索引最左前綴
若是組合索引爲:(name,email)
where name and email --使用索引
where name --使用索引
where email --不適用索引
explain查詢以後參數的含義(瞭解)