分析从几个维度
- 设计维度(引擎,列类型)
- 索引,sql优化
- 配置,硬件
- 架构维度
MyISAM
MyISAM引擎是MySQL 5.1及之前版本的默认引擎,它的特点是:
不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁
不支持事务
不支持外键
不支持崩溃后的安全恢复
在表有读取查询的同时,支持往表中插入新纪录
支持BLOB和TEXT的前500个字符索引,支持全文索引
支持延迟更新索引,极大提升写入性能
对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用
InnoDB
InnoDB在MySQL 5.5后成为默认索引,它的特点是:
支持行锁,采用MVCC来支持高并发
支持事务
支持外键
支持崩溃后的安全恢复
不支持全文索引
总体来讲,MyISAM适合SELECT密集型的表,而InnoDB适合INSERT和UPDATE密集型的表
sql语句优化
1.使用exists代替in,用not exists代替not in
2.避免在索引列上进行计算
3.避免在索引列上使用is null 和 is not null ,给个默认值
4.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引
5.sql like %分号在前索引会失效