优化:
用index
(×l 经常插入、删除、修改的表l 表记录太少l 数据重复且分布平均的表字段)
※ 一般来说,索引应该建立在那些将用于join,where判断和orderby排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引,对于一个ENUM类型的字段来说,出现大量重复值是很有可能的情况。
4) 使用join代替子查询
5) 使用union代替手动创建临时表使用union来创建查询的时候,我们只需要用union作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要相同。当我们可以确认不可能出现重复结果集或者不在乎重复结果集的时候尽量使用union all而不是union,因为union和union all的差异主要是前者需要将两个或者多个结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,增大资源消耗及延迟。
Mysql一览
安装
基本操作
数据类型与表约束
函数(聚合函数,子句,函数,复合查询,自我复制,合并查询,内连接和外连接)及其他特性
Mysql 高级特性(索引,事务,管理,触发器(触发器是一种特殊的存储过程),
存储过程(可以理解为 sql 语句集,有if/else, case,while等控制语句,
可以同时执行多条sql,实现较复杂的逻辑。)
函数的普遍特性:模块化,封装,代码复用;
速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;
弊端:
不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;
不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,
一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;
数据表太大时如果还是依靠sql优化速度已经无法保证了,这个时候可以创建一张数据统计表,
将统计出的数据存储在这张新表中,同时问题表和回答表设置触发器,
这两张表每次数据变化的时候同时更新数据统计表,
之后需要查询统计的数据时直接去查询数据统计表即可。
MySQL慢查询
分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,
还可以让MySQL记录下查询超过指定时间的语句,
我们将超过指定时间的SQL语句查询称为“慢查询”。
通过慢查询日志,找出相关语句,优化查询语句调整索引策略。
还可以将复杂存储过程、触发器、自定义函数交由应用代码实现;