存儲引擎、索引

存儲引擎、索引

 

存儲引擎

定義:

  就是數據庫存儲數據的技術,能夠類比成發動機引擎,不一樣的引擎性能各不相同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查詢以後參數的含義(瞭解)

相關文章
相關標籤/搜索