总结几点sql语句优化
一.表设计阶段:
1.主键的使用
a.业务日志表、安全审计表采用自增长;
b.自定义编号用于业务流程类表,根据一定的编号规则;
c.int型主键 用于基础数据表;
2.逻辑删除字段的设计
a.tinyint类型,1或0;
b.联合主键(如ID+starDate),另加starDate,endDate日期类型字段过滤数据;
3.尽量避免null值存在,尽可能使用默认值进行填充;
4.尽量使用varchar/nvarchar 代替 char/nchar;
二.查询语句注意事项
百万级数据库查询优化的出发点主要基于尽量避免全表扫描;
1.众所周知的像在WHERE ORDER 语句上的字段添加索引;(索引使用上的考虑和权衡,后续还会有总结的博文)
2.查询列用列名代替*,COUNT(1)取代COUNT(*);
3.尽量避免WHERE 子句上和NULL的逻辑判断,如:WHERE NAME IS NULL;
4.尽量避免WHERE 子句上使用表达式,如:select goods fromwarehouse where num/2=500 改为 select goods from warehouse where num=500/2;
5.尽量避免WHERE 子句上使用内置函数或标量函数;
6.尽量避免WHERE子句上<>和!=的出现;
7.尽量避免WHERE子句上OR 连接非索引列;
8.尽量避免like的使用;
9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算;
10.对于多张大数据量的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。
11.用 EXISTS代替 IN 是一个好的选择,如:select [score] from score where name in (select [name] from student)改成 select [score] from score where exists(select 1 from student );
12.查询语句通过拼接的Where子句带有参数的也会导致全表扫描。
因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。
解决的方法是可以改为强制查询使用索引:select [address] from student where name=@name 改为 select [address] from student with(index('indexname'))where name=@name;
13.索引并不是越多越好,一张表上最多不超过6个,后续我会针对索引的使用进行详细的总结;
14.能用数值的字段尽量不用字符;
以上内容为本人近期项目中总结以及参考网上贤人志士的文章进行梳理总结,以便增强个人在sql使用上的技巧性;
不足之处还请纠正补充!
引用连接:http://database.51cto.com/art/201407/445934.htm
总结几点sql语句优化的更多相关文章
- 优化数据库的方法及SQL语句优化的原则
优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...
- oracle之sql语句优化
oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...
- 数据库 基于索引的SQL语句优化之降龙十八掌(转)
一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言 客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...
- 数据库的优化(表优化和sql语句优化)
在这里主要是分为表设计优化和sql语句优化两方面来实现. 首先的是表设计优化: 1.数据行的长度不要超过8020字节.如果是超过这个长度的话这条数据会占用两行,减低查询的效率. 2.能用数字类型就不要 ...
- MySQL常用SQL语句优化
推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
- sql语句优化总结
sql语句优化总结 数据库优化的几个原则: 1.尽量避免在列上做运算,这样会导致索引失败: 2.使用join是应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query.不然join的越 ...
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ...
- 关于索引的sql语句优化之降龙十八掌
1 前言 客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连.超时,严重影响业务的正 ...
- SQL系列 - SQL语句优化个人总结
关于SQL语句优化方法 有些是通用的(如避免Select *): 有些不同的数据库管理系统有所区别(如Where子句顺序): 然后必须根据实际环境进行调优,因为即使是相同的数据库和表,在数据量或其他环 ...
随机推荐
- AJAX请求提交数据
1,AJAX准备知识:JSON JSON指的是JavaScript对象表示方法(JavaScript Object Notation) JSON是轻量级的文本数据交换格式 JSON独立于语言 JSON ...
- GrideView(二)---删除功能
情景一. 没有外键关联, 操作:在数据源中将删除选项选中--- GrideView 中的删除 选项选中 即可情景二. 有外键关联 *RowDeleting 行删除前触发 *RowDeleted 行删除 ...
- android编程取消标题栏方法(appcompat_v7、Theme.NoTitleBar)
方式一:编码方式 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance ...
- 基于 jQuery 的专业 ASP.NET WebForms/MVC 控件库!
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- aapt的常用命令
1. 列出apk包的内容 aapt l[ist] [-v] [-a] file.{zip,jar,apk} -v 以table形式列出来 -a 详细列出内容 例如:aapt l <你的apk文件 ...
- sass 基本语法
sass语法 文件后缀名 sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一种就是我们这里使用的scss文件,这种和我们平时写的css文件格式差不多,使用大括号和分号. 而本教程 ...
- Python 元组、列表
Python中,最常用的数据结构就是序列了.序列有以下几种:元组,列表,字符串等.注:代码都是在IDE中编辑的,没有用交互式环境. 一.元组(tuple) 元组其实有点类似C++中的数组,即一旦指定了 ...
- Gym 100512G Grand Tour (拓扑排序)
题意:一个团队要去参观一些学校,某些学校要在某些学校之前先参观,并且每个学校有一个权值,团队去的时间与权值的差作为难过度(最小是0), 所有的难过度的最大值是伤心度,让你安排参观顺序,使得这个伤心度最 ...
- Node 基本使用
node -v:查看node版本 npm -v:查看npm版本 npm install npm -g :升级npm版本 npm install <module_name> [-g]:安装指 ...
- Educational Codeforces Round 19 E. Array Queries(暴力)(DP)
传送门 题意 给出n个数,q个询问,每个询问有两个数p,k,询问p+k+a[p]操作几次后超过n 分析 分块处理,在k<sqrt(n)时,用dp,大于sqrt(n)用暴力 trick 代码 #i ...