一、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提供锁超时的功能,当一个事务获取锁超时之后会自动放弃,另一个事务就可以执行