1、软优化
1.1 EXPLAIN或DESC命令
使用该命令分析一条查询语句的执行信息,其中会显示索引和查询数据读取条数等信息。也可使用它分析一条查询语句执行的信息,其中会显示索引(key)和查询数据读取数据条数等信息。
1.2 优化子查询(join)
使用join代替子查询,子查询嵌套循环,嵌套查询时会建立一张临时表,临时表的建立和删除会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高。
1.3 使用索引
创建索引、使用索引。创建后可以使用profile查看执行时间。
创建索引:create index 索引名 from 表名(列名)。
详情参考:https://www.cnblogs.com/xu-xiaofeng/p/7673776.html
1.4 分解表
字段较多的表,若某些字段使用频率较低,将其分离出来从而形成新的表。
1.5 中间表
大量连接查询的表可以创建中间表,从而减少在查询时造成的连接耗时。
1.6 增加冗余字段
减少连接查询以提高效率。
2、硬优化
2.1 硬件三件套
配置多核和频率高的CPU,多核可以执行多个线程;
配置大内存,提高内存,既提高缓存区容量,减少磁盘I/O时间,从而提高响应速度;
配置高速磁盘或合理分布磁盘,提高并行操作能力。
2.2 优化数据库参数
优化数据库参数可以提高资源利用率,从而提高MySQL服务器性能.MySQL服务的配置参数都在my.cnf或my.ini,下面列出性能影响较大的几个参数.
key_buffer_size:索引缓冲区大小
table_cache:能同时打开表的个数
query_cache_size和query_cache_type:前者是查询缓冲区大小,后者是前面参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但可以在查询中使用SQL_NO_CACHE表示不要使用缓冲区,2表示在查询中明确指出使用缓冲区才用缓冲区,即SQL_CACHE.
sort_buffer_size:排序缓冲区
2.3 分库分表
主从数据库,配置master主数据库,设置好服务id与日志文件,它主要负责更新操作,从数据库slave,设置好服务id与日志文件(为了避免主数据库宕机后无机器代替,故从数据库的日志文件名与主数据库的一样),然后开启从数据库的IO线程与SQL线程。
网友评论