总结几点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子句顺序): 然后必须根据实际环境进行调优,因为即使是相同的数据库和表,在数据量或其他环 ...
随机推荐
- jquery 动态绑定bind()及模拟鼠标点击A链接
近来自觉前端有小小进步,幸而记之. 1.两个 css class 紧挨在一起 则在html元素中,要同时拥有这两个class,才能起作用 .block.db{ background-image:url ...
- 'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
'cmd' 不是内部或外部命令,也不是可运行的程序或批处理文件. Path 添加 %SystemRoot%/system32;%SystemRoot%;%SystemRoot%/System32/Wb ...
- How can I pass data from Flask to JavaScript in a template?
https://stackoverflow.com/questions/11178426/how-can-i-pass-data-from-flask-to-javascript-in-a-templ ...
- Ubuntu如何定时清理内存
Ubuntu如何定时清理内存 1.进入su jiqing@Ubuntu:~$ su 密码: root@Ubuntu:/home/jiqing# 2.创建cleanCache.sh #!/bin/bas ...
- JS处理Cookie
<script>function GetCookieVal(offset)//获得Cookie解码后的值{var endstr = document.cookie.indexOf (&qu ...
- 关于XAMPP Apache无法启动问题解决方案
安装好XAMPP后,启动Apache服务启动失败,然后从xampp安装目录下执行apache_start.bat文件,如下图 显示443端口被占用. 解决方法: 启动cmd,输入netstat -a ...
- bzoj 3527: [Zjoi2014]力【FFT】
大力推公式,目标是转成卷积形式:\( C_i=\sum_{j=1}^{i}a_jb_{i-j} \) 首先下标从0开始存,n-- \[ F_i=\frac{\sum_{j<i}\frac{q_j ...
- JS开发备忘笔记-- Javascript中document.execCommand()的用法
document.execCommand()方法处理Html数据时常用语法格式如下:document.execCommand(sCommand[,交互方式, 动态参数]) 其中:sCommand为指令 ...
- vue 相关技术文章集锦
不断更新,如果看到好的文章~~~ 总结篇 vue组件间通信六种方式(完整版) - 原作者:简书-浪里行舟 原理/源码篇 Vue.js 技术揭秘 Vue技术内幕 实战/经验篇 Vue相关开源项目库汇总 ...
- python列表和元组的常用操作
一.列表 需要安利一下:列表和字符串数是不一样的.进行操作时列表可以发生改变,而字符串不可以,所以直接在原来的对象上操作. 1.列表的增加 def append(self, p_object): # ...