MySQL 常用SQL优化

MySQL 常用SQL优化:
一.大批量插入数据:
1.对于load MyISAM存储引擎的表,可以通过关闭打开MyISAM表非唯一索引的更新来提升导入速度:
  例:mysql > alter table tbl_name disable keys;
     mysql > load data infile ‘/home/mysql/tbl_name.txt’ into table tbl_name;
     mysql > alter table tbl_name enable keys;
2.对于InnoDB类型的表有以下方式提高导入数据库的效率:
  (1)在导入钱执行set unique_checks=0关闭唯一性校验,在导入结束后执行set set unique_checks=1 恢复唯一性校验,可以提高
导入速度
   例:mysql > set set unique_checks=0;
      mysql > load data infile ‘/home/mysql/tbl_name.txt’ into table tbl_name;
      mysql > set set unique_checks=1;
  (2)如果使用自动提交方式,建议在导入前执行set autocommit=0关闭自动提交,导入后再执行set autocommit=1打开自动提交
   例:mysql > set autocommit=0;
      mysql > load data infile ‘/home/mysql/tbl_name.txt’ into table tbl_name;
      mysql > set autocommit=1;
二.优化Insert语句:
1.如果同时从同一客户插入很多行,尽量使用多个值表示的insert语句,这种方式将大大缩减客户端与数据库之间的连接,关闭等消耗
,是的效率比分开执行的单个insert语句快(在一些情况中几倍).
  例:insert into tset values (1,2),(1,3),(1,4)……
2.如果从不同客户插入很多行,能通过使用insert delayed语句得到更高的速度.DELAYED的含义是让insert语句马上执行,其实数据
都被放在内存队列中,并没有真正写入磁盘,这比每条语句分别插入要快得多;LOW_PRIORITY刚好相反,在所有其他用户对表的读写完
后才能插入.
3.将索引文件和数据库文件分在不同的磁盘上存放(利用建表中的选项);
4.如果进行批量插入,可以增加bukl_insert_buffer_size 变量值的方法来提高速度,但是,这只能对MyISAM表使用;
5.当从一个文本文件装载一个表时,使用LOAD DATA INFILE .这通常比使用很多INSERT语句快20倍.
三.优化GROUP BY语句:
1.如果查询包括GROUP BY但用户想要避免排序结果的消耗,则可以指定ORDER BY NULL禁止排序:
  例:mysql > explain select id ,sum(moneys) from sales2 group id \G;
     *********************************** 1.row **********************************
                         id: 1
               select_type: SIMPLE
                             table: sales2
                              type: ALL
          possible_keys: NULL
                               key: NULL
                      key_len: NULL
                                ref: NULL
                            rows: 1000
                           Extra: Using temporary ; Using Filesort
    1 row in set (0.00 sec)
    mysql > explain select id ,sum(moneys) from sales2 group id order by null \G;
     *********************************** 1.row **********************************
                                   id: 1
               select_type: SIMPLE
                            table: sales2
                             type: ALL
          possible_keys: NULL
                               key: NULL
                      key_len: NULL
                                ref: NULL
                            rows: 1000
                          Extra: Using temporary
    1 row in set (0.00 sec)
从上面的例子可以看出第一个SQL语句需要进行”filesort”,而第二个SQL由于ORDER BY NULL 不需要进行”filesort”,而filesort
往往非常耗费时间.
四.优化ORDER BU语句:
   在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序.WHERE条件和ORDER BY使用相同的索引,并且
ORDER BY的顺序和索引的顺序相同,并且ORDER BY的字段都是升序或者都是降序.
例如,下列SQL可以使用索引:
  mysql > select * from t1 order by key_part1 , key_part2,… ;
  mysql > select * from t1 where key_part1=1 order by key_part1 DESC , key_part2 DESC;
  mysql > select * from t1 ORDER BY key_part1 DESC , key_part2 DESC;
  但是在以下几种情况下则不使用索引:
  mysql > select * from t1 order by key_part1 DESC , key_part2 ASC ;
  –order by 的字段混合ASC和DESC
  mysql > select * from t1 where key2=constant order by key1;
  –用于查询行的关键字与ORDER BY中所使用的不相同
  mysql > select * from t1 order by key1 ,key2;
  –对不同的关键字使用ORDER BY
五.优化嵌套查询:
1.使用子查询可以一次性地完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易
.但是有些情况下,子查询可以被更有效率的连接(JOIN)替代.
六.优化OR条件:
1.对于含有OR的查询子句,如果要利用索引,则OR之间的每个条件列都必须用到索引;如果没有索引,则应该考虑增加索引.
七.使用SQL提示:
1.USE INDEX
  在查询语句中表名的后面,添加USE INDEX来提供希望MySQL去参考的索引列表,就可以让MySQL不在考虑其他可用的索引
  例: mysql > select * from sales2 use index (ind_sales2_id) where id = 3 ;
      –查询sales2表时采用ind_sales2_id索引
2.IGNORE INDEX
  如果用户只是单纯地向让MySQL忽略一个或者多个索引,则可以使用IGNORE INDEX作为HINT.
  例: mysql > select * from sales2 ignore index (ind_sales2_id) where id = 3 ;
      –查询sales2表时忽略ind_sales2_id索引
3.FORCE INDEX
  为强制MySQL使用一个特定的索引,可在查询中使用FORCE INDEX 作为HINT.
  例: mysql > select * from sales2 where id > 0 ;
      –当使用FORCE INDEX进行提示时,即便使用索引的效率不是最高,MySQL还是选择使用索引,这是MySQL留给用户的一个自行选择执行计划的权利

转载于:https://blog.51cto.com/samyu/154234

MySQL 常用SQL优化相关推荐

  1. mysql 常用sql调优_MySQL 常用SQL优化

    MySQL 常用SQL优化: 一.大批量插入数据: 1.对于load MyISAM存储引擎的表,可以通过关闭打开MyISAM表非唯一索引的更新来提升导入速度: 例:mysql > alter t ...

  2. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  3. mysql sql 1到10_(1.10)SQL优化——mysql 常见SQL优化

    (1.10)常用SQL优化 insert优化.order by 优化 1.insert 优化 2.order by 优化 [2.1]mysql排序方式: (1)索引扫描排序:通过有序索引扫描直接返回有 ...

  4. mysql sql优化_浅谈mysql中sql优化

    说到sql优化,一般有几个步骤呢,在网上看到了一篇很不错的帖子.在这分享一下吧,也是自己学习的一个过程. 一.查找慢查询 1.1.查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; ...

  5. idea 分栏_常用SQL优化与IDEA超实用技巧分享

    原标题:常用SQL优化与IDEA超实用技巧分享 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,更是我们程序员需要去关注 ...

  6. MySQL进阶SQL优化

    MySQL进阶SQL优化 查询效率分析: 子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询.在这种情况下可以考虑用联接查询来取代. 如果要用子查询,那就用EXISTS替代IN.用NOT ...

  7. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

  8. 【MySQL】MySQL数据库SQL优化工具 SQL Tuning Expert for MySQL(收费)

    1.概述 SQL Tuning Expert for MySQL 是 Tosska 公司推出的针对MySQL的SQL优化工具. 该工具不仅让DBA或者SQL开发人员,轻松阅读和理解执行计划,而且能产生 ...

  9. Mysql的sql优化方法

    Mysql的sql优化方法 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快.因此,在创建表的时候,为了 ...

最新文章

  1. 前后端分离 集群负载均衡 分布式 微服务
  2. WINCE的内存配置-config.bib文件的解析
  3. mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
  4. mapper代理(十一)
  5. Linux如何在栈上分配内存,Java堆与栈内存分配及String小记
  6. 11.排序算法_1_快速排序
  7. WCF技术剖析(卷1)正式出版
  8. .Net之路(四)利用DataTable、DataSet返回SQL Server的表或者单个字段
  9. pdg转pdf与djvu转pdf大法
  10. js操作Cookie,js设置Cookie值,js读取Cookie值
  11. PHP生成二维码名片带LOGO并解决LOGO失真
  12. C C++实现网络验证和本地验证
  13. 转载 centos CPU温度检测
  14. Python L型组件填图问题(棋盘覆盖问题)
  15. CIP4和JDF,您知道多少?(转)
  16. vsftp创建虚拟账户
  17. Laravel-Vue开发初探二:Inertia拾遗
  18. 网络模型——四种常见网络IO模型
  19. 比你拼命的人多的是,最可怕的是比你牛的人比你还拼命(每天看一段一个月刚刚好)
  20. Cholesky和LU矩阵分解

热门文章

  1. 【NLP】TransformerXL:因为XL,所以更牛
  2. 图片镂空算法集合[图](转)
  3. haddler处理队列 netty_如何实现延迟队列
  4. 恩施茶旅谋定乡村-农业大健康·万祥军:侗乡第一寨促生态
  5. 长白山特色产品谋定农民丰收节交易会 吉林蛟河农商互联
  6. Singleton单例模式
  7. [XUPT_ACM]寒假第一次比赛题解
  8. 三篇文章了解 TiDB 技术内幕——说存储
  9. Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)...
  10. Ueditor1.4.3上传视频IE下无法播放的问题