1、优化分片键(如果有分库分表)
(1)不要使用分区,分区性能很低,难以维护
(2)不要使用主从数据库,读写分离有了缓存就再也不需要分主从了,毕竟延迟问题是无法解决的(虽然很小)
(3)如果使用分库分表,那么查询条件务必先走分片键,否则就成了全表查询,性能超低
2、优化索引
(1)索引列务必重复度低
(2)使用索引就不能用OR查询,否则索引不起作用
(3)使用索引,like模糊查询不能以%开头
(4)查询条件务必以索引列开头,否则索引失效
(5)联合索引遵守最左原则
3、优化缓存
分离冷热数据,对于大内存访问评率低的数据适当分离
提高缓存命中率,命名问题
4、优化sql
见下面
5、硬件优化(治标不治本)
一.优化SQL语句又分为以下几个方面:
【1】优化查询语句
1、通过Explain和Describe关键字分析select查询语句,从而使开发人员知道查询效率低的原因。
语法如下:explain select * from bookmanager where Name='admin' \G;
2、通过添加索引进行优化
说起数据库的性能,索引可能使最物美价廉的东西了。使用索引可以快速的定位表中的某条记录,不用添加内存、不用修改程序,也不用调用sql语句,只需执行一个创建正确的索引,查询速度就可能提高千倍万倍。
索引并不一定是主键或者唯一的字段,如果表中的某个字段总是被搜索,就可以为其创建索引。
创建索引的语句如下:
create index index_name on table_name(manName);
使用索引应注意的事项:
(1)使用多列索引时,查询条件必须使用索引的第一个字符。
(2)like关键字配置的字符串不能以符号“%”开头。
(3)or关键字连接的所有条件都必须使用索引。如果or前后有一个条件的列不是索引,那么查询中讲不使用索引。
3、优化Order by
有两种方式如下:
(1)索引优化:对by后的列添加索引,从而大达到优化的目的。
(2)where+order by 的组合优化:通过where进行限制后在进行order by
4、优化group by (同3中通过加索引和where进行优化)
5、优化limit
6、优化子查询
在mysql中通过使用连接查询来代替子查询,从而达到优化目的。原因:子查询在执行的时候 数据库需要位内层查询语句的查询结果建立一个临时表,然后外层语句查询临时表,所以子查询的效率比较低,而连接查询就不存在这个问题。
总结优化查询的基本原则如下:
尽可能对每一条运行的sql语句进行Explain
尽力少使用Join(少使用多表查询)
尽量少排序
尽量避免select * 查询
尽量使用连接代替子查询
尽量少使用or关键字
尽量使用Union all代替union
尽量早过滤
避免“类型转换”
优化先优化高并发的sql语句
从全局出发优化,而不是片面调整
【2】优化其他执行语句
1、优化insert语句
禁用索引,禁用唯一性检查,使用一条insert插入多条语句。
2、优化update语句
使用一个update语句同时做多个更新。
3、优化delete语句
删除一条记录的时间与索引的数量成正比。删除一个表的所有行,使用truncate table Tbname 而不要使用delete from table
二、优化数据库结构
1、优化字段类型
数据库最耗时的就是IO处理,所以尽可能减少IO读写量。
数字类型:尽量不要使用double类型,不仅是长度问题,还有精度问题。对于整数,数据量大时区分TinyInt、Int、BigInt,如果确定不实用负数,添加unsigned定义。
字符类型:尽量不要使用text类型,性能低于char和varchar,定长使用char,不定长使用varchar
时间类型:尽量不使用Timestamp,只精确到某一天的话,可用Date类型。
Enum和Set:状态字段用enum,如果存放可预先定义的属性数据可以尝试用set
2、优化字符编码
3、适当进行拆分
4、适当增加冗余
5、优化数据库表
三、优化Mysql服务器
优化原则如下:
内存中的数据要比磁盘上的数据访问的快。
让数据尽可能长时间的留在内存里能减少磁盘读写活动的工作量。
让索引信息留在内存里要比让数据记录的内容留在内存里更为重要。
---------------------
作者:CarryJey
来源:CSDN
原文:https://blog.csdn.net/qq_37465368/article/details/80872285