运用的日志出现超时等错误
可以运用sar命令,top命令查看以后系统形状。
也可以经过Prometheus、Grafana等监控工具察看系统形状。
SQL语句表象
冗长
执行时间过长
从全表扫描获取数据
执行方案中的rows、cost很大
冗长的SQL都好了解,一段SQL太长阅读性一定会差,而且出现成绩的频率一定会更高。更进一步判别SQL成绩就得从执行方案入手,如下所示:
执行方案通知我们本次查询走了全表扫描Type=ALL,rows很大(9950400)基本可以判别这是一段"有滋味"的SQL。
获取成绩SQL不同数据库有不同的获取办法,以下为目前主流数据库的慢查询SQL获取工具
MySQL
慢查询日志
测试工具loadrunner
Percona公司的ptquery等工具
Oracle
AWR报告
测试工具loadrunner等
相关外部视图如v$、$session_wait等
GRID CONTROL监控工具
达梦数据库
AWR报告
测试工具loadrunner等
达梦功用监控工具(dem)
相关外部视图如v$、$session_wait等
SQL编写技巧SQL编写有以下几个通用的技巧:
• 合理运用索引
索引少了查询慢;索引多了占用空间大,执行增删改语句的时分需求静态维护索引,影响功用 选择率高(重复值少)且被where频繁援用需求树立B树索引;
普通join列需求树立索引;复杂文档类型查询采用全文索引效率更好;索引的树立要在查询和DML功用之间取得平衡;复合索引创立时要留意基于非前导列查询的状况
• 运用UNION ALL替代UNION
UNION ALL的执行效率比UNION高,UNION执行时需求排重;UNION需求对数据停止排序
• 避免select * 写法
执行SQL时优化器需求将 * 转成详细的列;每次查询都要回表,不能走掩盖索引。
• JOIN字段建议树立索引
普通JOIN字段都提早加上索引
• 避免复杂SQL语句
提升可阅读性;避免慢查询的概率;可以转换成多个短查询,用业务端处置
• 避免where 1=1写法
• 避免order by rand()相似写法
RAND()招致数据列被屡次扫描
SQL优化执行方案
完成SQL优化一定要先读执行方案,执行方案会通知你哪些中央效率低,哪里可以需求优化。我们以MYSQL为例,看看执行方案是什么。(每个数据库的执行方案都不一样,需求自行了解)explain sql
接上去我们用一段实践优化案例来阐明SQL优化的进程及优化技巧。
优化案例表结构
CREATE TABLE `a`( `id` int(11) NOT NULLAUTO_INCREMENT, `seller_id` bigint(20) DEFAULT NULL, `seller_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`));CREATE TABLE `b`( `id` int(11) NOT NULLAUTO_INCREMENT, `seller_name` varchar(100) DEFAULT NULL, `user_id` varchar(50) DEFAULT NULL, `user_name` varchar(100) DEFAULT NULL, `sales` bigint(20) DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`));CREATE TABLE `c`( `id` int(11) NOT NULLAUTO_INCREMENT, `user_id` varchar(50) DEFAULT NULL, `order_id` varchar(100) DEFAULT NULL, `state` bigint(20) DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`));
三张表关联,查询以后用户在以后时间前后10个小时的订单状况,并依据订单创立时间升序陈列,详细SQL如下
(责任编辑:admin)