存储引擎
定义:
就是数据库存储数据的技术,可以类比成发动机引擎,不同的引擎性能各不相同
分类*****
最常见的两个存储引擎是innodb和myisam,区别如下:
1、innodb
--1、(默认版本是5.5及以上)
--2、支持事务
--3、不支持全文索引
--4、索引和数据结构在同一文件中,.ibd
表的结构是在.frm文件中
2、myisam
--1、(默认版本5.5以下,主要5.3用的人最多)
--2、不支持事务
--3、支持全文索引
--4、.frm:表结构
.MYD:表数据
.MYI:表索引
3、memory(不常用)
ps:innodb不支持全文索引
国内普遍用的全文索引 sphinx(斯芬克斯)
索引
类比
相当于新华字典的目录,我们可以把索引理解成一个特殊的文件,
如果没有这个文件,查询是从前往后查找数据的,
如果有这个文件,会按照一种特殊的数据结构(二叉树)查找数据
作用
加快查询的数据
分类
1、主键索引:加快查询 + 不能重复 + 不能为空 primary key
2、唯一索引:加快查询 + 不能重复 unique(列名)
联合唯一索引:加快查询 + 不能重复 unique(列名1,列名2,..)
3、普通索引:加快查询 index(列名)
创建及删除
创建
1、建表时创建
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;
2、表存在后创建
# 主键索引的创建 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)
删除
# 如果主键是自增的,则无法删除,要先取消自增再删除 # 删除唯一索引和普通索引一样 drop index ix_name on t1;
索引的优缺点
优点:
查询数据速度快
缺点:
版本5.3以下:
删除和修改数据的速度会变得很慢,会重构索引
版本5.5以上:
删除和修改数据的速度不是特别慢
索引的使用
explain 工具
查看sql语句是否用得上索引,或者查看sql执行效率的工具
给执行的sql语句出一个报告,通过此报告来判断sql语句的
执行效率和效果(不一定都按结果上来)
SQL语句的规则
1、不建议使用like进行搜索
2、组合索引最左前缀
如果组合索引为:(name,email)
where name and email --使用索引
where name --使用索引
where email --不适用索引