MySQL - optimization
建表时选择合适的引擎
- 如果表只是以查询为主,很少修改,则可以选择 MyISAM 引擎。
- 数据库读写分离,读的服务器中的表可以用 MyISAM 引擎。
合理使用索引
- 对经常查询的列,或排序的列,使用索引。
- 对需要查询值中的关键字的列,使用 FULLTEXT 索引。
- 对经常查询的组合条件,建立组合索引。
- 尽量避免在
WHERE子句中使用!=或<>操作,或对字段进行NULL值判断,这样会使索引失效,而扫描全表。 - 尽量用
WHERE代替HAVING,因为HAVING是在查询出的结果中进行过滤,WHERE可以使用索引查询。
数据库结构优化
- 范式优化:比如消除冗余的列等。
- 拆分表:根据表的特性,必要时对表进行水平拆分和垂直拆分。
- 垂直拆分:对高并发请求的表,可以根据业务将表拆分,以分担 IO 压力。
- 水平拆分:对于数据量太大的表,可以考虑水平拆分。