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;
1.如果同时从同一客户插入很多行,尽量使用多个值表示的insert语句,这种方式将大大缩减客户端与数据库之间的连接,关闭等消耗
例:insert into tset values (1,2),(1,3),(1,4)……
2.如果从不同客户插入很多行,能通过使用insert delayed语句得到更高的速度.DELAYED的含义是让insert语句马上执行,其实数据
3.将索引文件和数据库文件分在不同的磁盘上存放(利用建表中的选项);
4.如果进行批量插入,可以增加bukl_insert_buffer_size 变量值的方法来提高速度,但是,这只能对MyISAM表使用;
5.当从一个文本文件装载一个表时,使用LOAD DATA INFILE .这通常比使用很多INSERT语句快20倍.
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)
在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序.WHERE条件和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操作,同时也可以避免事务或者表锁死,并且写起来也很容易
1.对于含有OR的查询子句,如果要利用索引,则OR之间的每个条件列都必须用到索引;如果没有索引,则应该考虑增加索引.
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优化相关推荐
- mysql 常用sql调优_MySQL 常用SQL优化
MySQL 常用SQL优化: 一.大批量插入数据: 1.对于load MyISAM存储引擎的表,可以通过关闭打开MyISAM表非唯一索引的更新来提升导入速度: 例:mysql > alter t ...
- php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
- mysql sql 1到10_(1.10)SQL优化——mysql 常见SQL优化
(1.10)常用SQL优化 insert优化.order by 优化 1.insert 优化 2.order by 优化 [2.1]mysql排序方式: (1)索引扫描排序:通过有序索引扫描直接返回有 ...
- mysql sql优化_浅谈mysql中sql优化
说到sql优化,一般有几个步骤呢,在网上看到了一篇很不错的帖子.在这分享一下吧,也是自己学习的一个过程. 一.查找慢查询 1.1.查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; ...
- idea 分栏_常用SQL优化与IDEA超实用技巧分享
原标题:常用SQL优化与IDEA超实用技巧分享 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,更是我们程序员需要去关注 ...
- MySQL进阶SQL优化
MySQL进阶SQL优化 查询效率分析: 子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询.在这种情况下可以考虑用联接查询来取代. 如果要用子查询,那就用EXISTS替代IN.用NOT ...
- MySQL之SQL优化详解(二)
目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...
- 【MySQL】MySQL数据库SQL优化工具 SQL Tuning Expert for MySQL(收费)
1.概述 SQL Tuning Expert for MySQL 是 Tosska 公司推出的针对MySQL的SQL优化工具. 该工具不仅让DBA或者SQL开发人员,轻松阅读和理解执行计划,而且能产生 ...
- Mysql的sql优化方法
Mysql的sql优化方法 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快.因此,在创建表的时候,为了 ...
最新文章
- 前后端分离 集群负载均衡 分布式 微服务
- WINCE的内存配置-config.bib文件的解析
- mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
- mapper代理(十一)
- Linux如何在栈上分配内存,Java堆与栈内存分配及String小记
- 11.排序算法_1_快速排序
- WCF技术剖析(卷1)正式出版
- .Net之路(四)利用DataTable、DataSet返回SQL Server的表或者单个字段
- pdg转pdf与djvu转pdf大法
- js操作Cookie,js设置Cookie值,js读取Cookie值
- PHP生成二维码名片带LOGO并解决LOGO失真
- C C++实现网络验证和本地验证
- 转载 centos CPU温度检测
- Python L型组件填图问题(棋盘覆盖问题)
- CIP4和JDF,您知道多少?(转)
- vsftp创建虚拟账户
- Laravel-Vue开发初探二:Inertia拾遗
- 网络模型——四种常见网络IO模型
- 比你拼命的人多的是,最可怕的是比你牛的人比你还拼命(每天看一段一个月刚刚好)
- Cholesky和LU矩阵分解
热门文章
- 【NLP】TransformerXL:因为XL,所以更牛
- 图片镂空算法集合[图](转)
- haddler处理队列 netty_如何实现延迟队列
- 恩施茶旅谋定乡村-农业大健康·万祥军:侗乡第一寨促生态
- 长白山特色产品谋定农民丰收节交易会 吉林蛟河农商互联
- Singleton单例模式
- [XUPT_ACM]寒假第一次比赛题解
- 三篇文章了解 TiDB 技术内幕——说存储
- Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)...
- Ueditor1.4.3上传视频IE下无法播放的问题