1.索引
索引类型:
普通索引,主键索引,唯一索引,组合索引,全文索引
索引优缺点:
优点:查询块
缺点:浪费存储空间,在增删改的时候需要额外的维护,
不走索引:
null ,like ,!=(<>) ,or ,not
查看是否走索引:
explain:noindex(未走索引),using index(使用索引)
explain可以用于分析SQL语句。
hash索引跟Btree索引:
hash索引无法:排序,无法范围查询,每次都要全表扫描,hash冲突。
delete与truncate
truncate性能更高(truncate是DDL语言,delete是DML)
truncate删除后不能回复,不能回滚,即不支持事务
2.优化
尽量不使用select *
为搜索字段建索引
为每张表设置一个主键ID(int)
使用not null 而不是null(null需要额外的空间来记录它们的值是否为null)
(MySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。可空列需要更多的储存空间,还需要在MySQL内部进行特殊处理。(可以考虑用0或空字符串代替null)
垂直分割(拆分为多个小表,比如不经常用的跟经常用到的)
水平分割
3.锁
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般