SQL优化 总结 精简
索引:
考虑在 where 及 order by 涉及的列上建立索引
经常同时存取多列,且每列都含有重复值可考虑建立组合索引,且查询越频繁的字段放前面
按需使用聚集与非聚集索引,聚集不适合频繁更新、适合范围查询( > ,< ,> =,< =)和 order by、group by ,注意复合索引的顺序,选择性高的建议放前面
不要在数据选择性不高的字段建立索引
索引控制在6个以内为好
大字段可以考虑使用前缀索引
去除冗余索引
where子句的操作:
尽量避免在 where 子句中对字段进行 null 值判断、!=或<>操作符、 or 来连接条件、in 和 not in、like时%在前面、使用参数,如where num=@num、
表达式操作,如where num/2=100、函数操作(“=”左边进行函数),如substring(name,1,3)='abc';#name、算术运算或其他表达式运算
exists 代替 in
一个查询中避免多个范围查询
where子句中的数据扫描不超过表总数据量的30%
表结构:
能用数字和枚举类型就不用其他类型
使用 varchar/nvarchar 代替 char/nchar
字段尽可能的使用 NOT NULL
把IP地址存成 UNSIGNED INT
固定长度的表会更快
越小的列会越快
临时表:
能用变量就不要用临时表
避免频繁创建和删除临时表
需要重复引用大型表或常用 表中的某个数据集时可用临时表
新建临时表时,如果一次性插入数据量很大,用 select into 代替 create table
注意删除临时表,先 truncate table ,然后 drop table
其他:
不使用select *
大量数据时不适合用游标处理
在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF
定期ANALYZE、CHECK 、OPTIMIZE 表
EXPLAIN 你的 SELECT 查询
善用LIMIT 避免一次性查询大量数据
在Join表的时候使用相同类型的列,并将其索引
千万不要 ORDER BY RAND()
除了关联表 永远为每张表设置一个ID
Prepared Statements小心“永久链接”
尽量避免大事务操作
拆分大的 DELETE 或 INSERT 或 insert .. into .. select.. 语句 减少锁表时间
使用orm
使用缓存,例如一级缓存,二级缓存、redis、memcace分布式
合理用运分库、分表与分区表提高数据存放和提取速度
SQL优化 总结 精简的更多相关文章
- 转://从一条巨慢SQL看基于Oracle的SQL优化
http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...
- 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)
本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...
- SQL优化:索引的重要性
开篇小测验 下面这样一个小SQL 你该怎么样添加最优索引 两个表上现在只有聚集索引 bigproduct 表上已经有聚集索引 ProductID bigtransactionhistory 表上已经有 ...
- Oracle SQL优化进阶学习
引言 对于下面的Oracle分页如何优化该段语句: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM task_log order by ...
- 对SQL 优化,提升性能!
对SQL 进行优化能够有效提高SQL 语句的执行效率,降低系统资源开销,是开发者提高后端系统处理能力的首选方案. 新产品上线后,随着运营推广活动的开始,业务进入快速增长期,数据库作为后端系统唯一或者主 ...
- SQL优化案例—— RowNumber分页
将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...
- sql 优化
1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...
- SQL 优化总结
SQL 优化总结 (一)SQL Server 关键的内置表.视图 1. sysobjects SELECT name as '函数名称',xtype as XType FROM s ...
- (转)SQL 优化原则
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
随机推荐
- gcc与g++的编译链接的示例详解
一.编译方式的示例详解 1. 编译C代码 代码如下:main.c /*! ************************************************************** ...
- 写一些脚本的心得总结系列第4篇-------从数据库同步到redis
5.从数据库同步到redis的. redis把数据放内存里,读取都非常方便,也提供了远超memcache的丰富数据结构.下面我举2个例子,比如1)把数据从数据库写入到redis: <?php $ ...
- Java基础知识拾遗(一)
Java Threads 1. 创建线程的三种方法? 继承Thread类: 实现Runnable接口: 使用Executor框架创建一个线程池. 每个线程都有优先级(Thread.MAX_PRIORI ...
- 0-ajax操作json(番外篇)
[可以先看后边再看此文] get获取json 前端代码 <!DOCTYPE html> <html> <head> <meta charset="u ...
- 鼠标形状css样式
鼠标形状css样式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- DateTime & UTC 相互转化
public long ToUnixTime(DateTime date) { var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.U ...
- Front-End(二)——HTML
本文主要对html迭代学习中的要点.冷点简述罗列. html之前也说过,主要为了描述页面的结构和内容,合理使用结构化的标签,<h1>.<div>等,有利于前端开发,也有利于搜索 ...
- ios之极光推送消息收到以后对消息的处理总结
当我们的APP收到推送消息后,通常需要根据推送内容点击消息进入到指定的页面 这里讲一下收到推送消息后的处理,分为三种情况 :1.APP处于前台运行情况下 2.APP处于后台挂起情况下 3. ...
- python 算法练习
根据给定的线性函数来确定函数的表达形式: examples: get_function([0,1,2,3,4]) => f(x)=x get_function([1,4,7,10,13]) =& ...
- android 实现与服务器的长链接 方式
http://blog.csdn.net/coffeeco/article/details/13276437 这边文章主要看服务端,使用tomcat7以上实现服务端的接收消息以及消息发送 http: ...