MySQL单机优化---SQL优化

SQL优化(变多次维护为一次维护

  Sql优化分为:DDL、DML、DQL

  一、DDL优化

    1 、通过禁用索引来提供导入数据性能 。 这个操作主要针对有数据库的表,追加数据

      //去除键

      alter table test3 DISABLE keys;

      //批量插入数据

      insert into test3 select * from test;

      //恢复键

      alter table test3 ENABLE keys;

    变多次索引维护为一次索引维护

       2、 关闭唯一校验

      set unique_checks=0  关闭

      //批量插入数据

      insert into test3 select * from test;

      set unique_checks=1  开启

    变多次唯一校验为一次唯一校验

        3、修改事务提交方式(导入)

      set autocommit=0   关闭# false

      //批量插入

      set autocommit=1   开启 true

    变多次事务提交为一次事务提交

  二、DML优化

    insert into test (name) values(2);

    insert into test values(1,3);

    insert into test values(1,4);

    //合并多条为一条 mybatis的批量操作:

    insert into test values(1,2),(1,3),(1,4)

    变多次事务提交为一次事务提交

  三、DQL优化

    (1)   1 order by优化

      1、多用索引排序

      2、普通结果排序(非索引排序)Filesort

      索引本身就是排序的,所以多使用索引。

    (2)    group by优化

      查询某个时间的付款总和

      explain

      select DATE_FORMAT(payment_date,‘%Y-%m‘),sum(amount) from payment GROUP BY DATE_FORMAT(payment_date,‘%Y-%m‘) ;

      explain

      select DATE_FORMAT(payment_date,‘%Y-%m‘),sum(amount) from payment GROUP BY DATE_FORMAT(payment_date,‘%Y-%m‘) order by null;

      在group by是使用order by null,取消默认排序

    (3) subQuery嵌套优化

       在客户列表找到不在支付列表的客户

       #在客户列表找到不在“支付列表”的客户 , 查询没买过东西的客户

       explain

       select * from customer where customer_id not in (select DISTINCT customer_id from payment);

       explain

          select * from customer c left join payment p on(c.customer_id=p.customer_id) where p.customer_id is null   -- 这种是基于“索引”外链

    (4) or优化

      在两个独立索引上使用or的性能优于

      1、 or两边都是用索引字段做判断,性能好!!

      2、 or两边,有一边不用,性能差

      3、 如果employee表的name和email这两列是一个复合索引,但是如果是 :name=‘A‘ OR email=‘B‘ 这种方式,不会用到索引!

    (5)   limit优化

      select film_id,description from film order by title limit 50,5;

      select a.film_id,a.description from filqm a inner join (select film_id from film order by title limit 50,5)b on a.film_id=b.film_id

  30种sql语句优化:https://www.cnblogs.com/Little-Li/p/8031295.html

原文地址:https://www.cnblogs.com/wanghj-15/p/11470506.html

时间: 2024-10-11 17:52:25

MySQL单机优化---SQL优化的相关文章

【MySQL笔记】SQL优化利器 - explain命令的输出格式详解

有MySQL使用经验的同学在实际项目中可能会遇到SQL慢查询的场景,有些场景很容易定位问题所在(如单表操作有慢查询SQL时,仔细check SQL语句通常很容易定位索引问题),而有些复杂业务场景下(如多表联合查询几十个字段并做group或sort等操作),人工check SQL语句通常很难发现SQL瓶颈根源.这个时候,MySQL提供的explain命令就派上用场了. 本笔记主要对explain的输出结果做说明,并给出根据explain输出对SQL做优化的思路. 1. EXPLAIN语法及用途 e

MySQL专题3 SQL 优化

这两天去京东面试,面试官问了我一个问题,如何优化SQL 我上网查了一下资料,找到了不少方法,做一下记录 (一). 首先使用慢查询分析  通过Mysql 的Slow Query log 可以找到哪些SQL运行很慢.耗时间  在my.ini中: long_query_time=1 log-slow-queries=d:\mysql5\logs\mysqlslow.log 把超过1秒的记录在慢查询日志中 可以用mysqlsla来分析之.也可以在mysqlreport中,有如 DMS分别分析了selec

SQL数据库数据优化SQL优化总结( 百万级数据库优化方案)

网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到.纠正以及补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id f

数据库优化 - SQL优化

前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优.但是一些"不好"的SQL也会导致数据库查询变慢,影响业务流程.本文从SQL角度进行数据库优化,提升SQL运行效率. 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长 应用的日志出现超时等错误 可以使用sar命令,top命令查看当前系统状态. 也可以通过Prometheus.Grafana等监控工具观察系统状态.(感兴趣的可以翻看我之

MySQL 5.6 SQL 优化特性

http://blog.chinaunix.net/uid-259788-id-4146363.html http://www.cnblogs.com/Amaranthus/p/4028687.html   MYSQL 5.6手册 http://www.cnblogs.com/hustcat/category/214566.html   YY哥 http://blog.163.com/li_hx/blog/static/18399141320150253652874/ 那海蓝蓝 http://t

mysql 简单的sql优化示例[不定时更新]

对于慢sql的分析步骤: 1) desc|explain sql 查看执行计划, 对于type很慢的, 分析是否建立了对应字段的索引 2) 进行排除法, 把子查询抽离出来, 单独执行,定位慢查询是哪个子查询导致的. 专门进行优化. 脚本: CREATE TABLE stu ( id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键', NAME VARCHAR(50) NOT NULL DEFAULT '' COMMENT '名称', phone

MySQL 学习四 SQL优化

MySQL逻辑架构: 第一层:客户端层,连接处理,授权认证,安全等功能.   第二层:核心层,查询解析,分析,优化,缓存,内置函数(时间,数学,加密),存储过程,触发器,视图   第三层:存储引擎.负责MySQL中数据的存储和提取. MySQL查询过程 客户端/服务端通信协议: 1 学习使用EXPLAIN ??? 2 创建正确的索引 数据库的索引像书的索引一样,他们的位置信息被保存,并且包含数据库的主要信息.可以使用EXPLAIN来查找 缺失的索引. 3 拒绝默认的设置:有三个关于MySQL性能

Mysql 分页查询sql优化

SELECT COUNT(id) FROM ts_translation_send_address EXPLAIN SELECT * FROM ts_translation_send_address ORDER BY id LIMIT 2000000,10; SELECT * from ts_translation_send_address t INNER JOIN ( SELECT ID FROM ts_translation_send_address ORDER BY id limit 20

程序新能优化-SQL优化