一 sql的优化
1、选取最适用的字段属性
2、使用连接(JOIN)来代替子查询(Sub-Queries)
连接(JOIN)之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
3、使用联合(UNION)来代替手动创建的临时表
MySQL从4.0的版本开始支持union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要相同
4、使用事务
尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下,当这个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来。设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情况,就应该使用事务,它的作用是:要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性。事物以BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。
5、锁定表
尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。
6、使用外键
保证数据的关联性
7、使用索引
索引说明:https://blog.nowcoder.net/n/af5cf1ee1be7400fbe5c83d6d0f3c424
8、优化的查询语句
查询优化的过程:首先查看慢查询日志找到慢sql,随后exlpain分析原因,紧接着show profiles来看具体的执行细节再来进行优化。

二 索引的优化
避免索引失效
索引失效的情况如下:
1违背最佳左前缀法则
2模糊查询以通配符开头
3对索引字段进行函数操作
4使用is null is not null等
5使用or 不等于(<> !=)等
6字符串不加单引号

三 应用的优化
1 建立数据库连接池,减少建立连接的次数
2 减少对MySQL访问的次数。其中包括避免多次查询、建立缓存。
3 负载均衡。可以靠主从复制读写分离和分布式数据库架构实现。

四 查询缓存的优化
1介绍:查询缓存是数据库执行相同的sql语句时,会直接从查询缓存中读取,当数据被修改时,查询缓存会失效。频繁修改的表不适合查询缓存。
2查询缓存的相关配置
图片说明
图片说明
3查询缓存失效
图片说明

五 内存的优化
图片说明
图片说明
注:图来自黑马教学视频