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