一、mysql创建索引的方式
1.创建表时创建索引
2.使用alert table add 方式添加索引
二、mysql有哪几种索引
1.普通索引
用来加速数据查询速度而建立的索引。多建立在经常查询的字段上和经常用于排序的字段上
创建方式:alert table add index index_name(column)
2.主键索引
1.主键索引不可以为空
2.一张表中只能有一个主键索引
3.主键索引中的值不能重复
4.主键索引不可以做外键
**主键索引和唯一索引的区别:主键索引为一种约束和规则 唯一索引只是索引的一种**加粗样式**
创建方式:alert table add index primay(column)
3.唯一索引
唯一索引中的值不可重复
创建方式:alert table add index unique(column)
4.外键索引
三、 mysql的优化
再对sql语句进行优化之前应使用explan查看优化方式
通过explan中的字段判断索引是否被使用
explan字段
四、使用索引有哪些注意点
使用like对索引进行查询时应注意只能模糊查询后面的 即 like 'column%'
left join时若要使用索引要保证两个字段都一添加索引和字段类型相同
五、msyql除索引之外的优化方式
1.不要使用select * from 这样的查询应尽可能指定字段 这样的好处是避免对表的扫描同时具有观看性
2.当数据查询结果确定只有一条时 应使用limit 1来避免sql语句继续对数据的查询
3.尽可能保证创建表时有一个主键 且为int类型
4.拆分大的insert和delete语句 防止对表的锁定
六 、事务的特性
1.原子性
2.一致性
3.隔离性
4.持久性
七、mysql隔离级别
1.可读取未保存数据(脏读)
2.不可读取保存数据(不可重复读)
3.可重复读(幻读) mysql默认隔离级别 innodb行锁来防止幻读
4.可串行化(最高隔离级别 但可能会造成大量的连接超时和死锁)
八、MySQL有哪些锁
1.mysql锁分为库锁、表锁、行锁
行锁 主键明确则进行行锁 Inddob支持行锁同时支持事务
select * from web_user where id =1 for update;
表锁 主键不明确则进行表锁 myisam只能进行表锁
select * from web_user where username =`张三` for update;
九、mysql的锁算法
1.行锁算法
1.普通行锁 record lock 键值存在条件范围内且记录存在
2.间隙锁 gap 键值不存在条件范围内 叫做间隙 引擎就会对这个"间隙"加锁 就是gap机制(可以解决幻读问题)
3.行间隙所 next-key lock
既在键值范围内 又不在键值范围内
举例: id 只到50
select * from web_user where id>49 for update
2.表算法
1. 意向锁 当一个事务带着表锁去访问一个加了行锁的资源时 行锁就会自动讲表锁住(类似java的锁膨胀)
2. 自增锁 表中自增数据添加
十、解决mysql死锁
InnoDB提供锁超时的功能,当一个事务获取锁超时之后会自动放弃,另一个事务就可以执行