首先应该想到的是: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服务器

优化原则以下:

内存中的数据要比磁盘上的数据访问的快。

让数据尽量长时间的留在内存里能减小磁盘读写活动的工做量。

让索引信息留在内存里要比让数据记录的内容留在内存里更为重要。