SQL语句优化经典小技巧
1,对于MyISAM引擎,当导入大批量数据的时候,可以先将他的一些keys禁用掉:
alter table table_name disable keys;
再加载数据:loading data;
再重新启用keys:altertable table_name enable keys;
如果不禁用keys会比较慢,因为只要向里添加一条数据就做索引,就会很慢,禁用以后,先将数据导入进去,再启用keys,就会先导入全部数据,再由数据库慢慢的为每一条记录做索引就OK了。
对于Innodb引擎,将要导入的数据按照主键排序时,设置set unique_check=0,即关闭唯一性校验,如果不关闭,每次添加的时候都要校验一次,会很慢,当然你也要保证添加的主键没有重复的。还有一个设置就是:set autocommit=0,即关闭自动提交。
MyISAM和Innodb的区别是什么?(创建数据库时使用的是什么引擎,建立表时使用的就是什么引擎)
1)MyISAM不支持外键,Innodb支持外键。
2)MyISAM不支持事务,Innodb支持事务。
3)数据的存储方式不同。Innodb在建立表的时候只会将表结构文件*.frm放到%MySQL%\data\数据库名 下,而不会将数据文件放到这里。那么他去哪了呢?它其实是在%MySQL%\data下的ibdata1中。如果是MyISAM引擎,就会将常规的三个数据文件创建到数据库中。
创建表的时候指定引擎:create table tt2(id int)engine=MyISAM;建立后,创建三个文件在数据库里。然后向里面疯狂的添加数据。再通过delete删除一些记录,这时会发现,数据文件并没有变小。所以MyISAM删除的时候空间不释放。那么以后如果程序上线,用户大批量的向里添加数据,你即使对这个表的数据做了delete操作,空间也不会释放,会越长越大,总有一天硬盘空间会受不了。要对引擎为MyISAM的表定时清理,通过指令:optimize table 表名,这个指令会释放空间。
MyISAM的查询速度很快,为什么很快呢?因为删除的时候空间不释放。
常见的SQL优化手法:
1)使用order by null 来禁用排序。使用group by的时候默认会对分组的字段排序。
例如我们分析下面语句:
执行语句select* from dept group by dname order by null;就不会使用排序了。
2)有些时候,可以使用连接来代替子查询。尽量少使用子查询,多使用join。因为join不会在内存中创建临时表,所以速度较快。
3)如果想要在含有or的查询语句中利用索引,则or之间的每个条件列都必须用到索引,如果没有索引,则应该考虑增加索引。例如:如果必须执行查询语句:select * from 表名 where 条件1=”...” or 条件2=”...”;那就必须为条件1和条件2都加索引,才可以。
选择合适的数据类型:
1)在精度要求高的应用中,建议使用定点数(decimal)来存储数值,以保证结果的准确性。
例如我们要在数据库保存100000.32万美金这样的数据,通常我们会使用float来存储。
我们可能会这样:create table sal(t1 float(10,2));创建表。这样查询出的结果会有问题,如下:
如果这样定义:create table sal2(t1 decimal(10,2));
在查询结果就OK了。
2)日期类型要根据实际需要选择能够满足应用的最小存储的早期类型。
如果使用int或bigint存放时间类型的数据,例如:
create table bbs(id int,con varchar(1024),pub_timeint);
查询的时候,可以使用date来将int转化成日期:date(‘Ymd’,时间*24*60*60);
但是使用这个date的时候是有问题的,这个date表示的日期范围是1970年1月1日到2038年1月19日。如果超出这个年限,就不合适了。
这里的年数限制并不是date的问题,而是操作系统的问题,windows32位限制是上面的日期。如果是64为就可以表示比这个更大的日期了。
如果超出年限,就会自动回到1970年。
SQL语句优化经典小技巧相关推荐
- mysql insert 语句优化_分享insert into语句优化的小技巧
MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ...
- SQL 语句优化原则:
SQL 语句优化原则: 1. IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从执行的步骤来分析用IN的SQL与不用 ...
- 【大话Mysql面试】-SQL语句优化
五.SQL优化 5.1 如何定义以及优化SQL语句的性能问题?创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因? 对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计 ...
- SQL语句优化技术分析
SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...
- 提高系统性能——对SQL语句优化的思考
软件在研发的过程中自始至终都在留意着系统的可扩展性.但与此同一时候也在关注着系统的性能,SQL语句作为系统性能的一环不容忽视.从今天開始结合开发的经验,谈一下我对SQL语句优化的理解和认知: 1.在联 ...
- 【腾讯面试题】SQL语句优化方法有哪些?
SQL语句优化 性能不理想的系统中,除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂 ...
- mysql常用sql语句优化
转载自:http://www.cnblogs.com/gomysql/p/3632209.html 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要因素.当然还有其他方 ...
- mysql高效sql语句_高效SQL优化 非常好用的SQL语句优化34条
高效SQL优化 非常好用的SQL语句优化34条 相关软件相关文章发表评论 来源:2011/2/13 9:38:43字体大小: 作者:佚名点击:576次评论:0次标签: 类型:电子教程大小:8.5M语言 ...
- SQL SERVER 的SQL语句优化方式小结
SQL SERVER 的SQL语句优化方式小结 详细出处参考:http://www.jb51.net/article/19547.htm 1.SQL SERVER 2005的性能工具中有SQL Ser ...
最新文章
- Arduino 控制舵机
- wordpress上传主题错误解决方法
- 【桌面虚拟化】之五PCoIP
- 使用Node.js部署智能合約(Smart Contract)
- Linux nohup 和 命令
- ssh白名单_阿里云服务器ssh白名单
- matlab的概述,Matlab概述
- 树形结构 —— 优先队列
- 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ
- Ubuntu 16.04下Linux驱动编写第一步
- tushare pro积分规则
- 电机学直流电机知识点(根据现有题目的总结)
- 男 女 java 枚举_献给我老公 - Java枚举类型
- Spring Security OAuth2 实现使用JWT
- Java8--20道关于Stream流的题目练习
- 设备树学习(二十三、番外篇-中断子系统之softirq)
- Cuba 设置studio的主题
- 阿尔斯通任命耿明为中国区总裁;希尔顿集团大中华区首推零工模式 | 美通企业日报...
- 入门微信小程序开发(三)数据绑定的几种用法
- 【Shell】在windows下编辑shell脚本
热门文章
- AI中恢复文件,编辑和管理文档,熟悉画板,掌握辅助工具,原位粘贴,掌握形状绘图工具,掌握线型绘图工具,直接选择工具的用法
- oracle触发器停止,Oracle触发器死锁问题解决
- Typora 免费版下载/主题下载
- stm32的引脚wakeup有什么作用
- 低成本有效激励员工五大法则
- java多线程复习与巩固(四)
- ParserError: Error tokenizing data. C error: EOF inside string starting at row 11020412
- RISK-V品牌的中国化历程(下)
- css中的position定位详解
- 神秘海域4:盗贼末路特效解密