刚整理的SQL常见替代点
来源:互联网 发布:现货看盘软件 编辑:程序博客网 时间:2024/05/17 22:33
1、能用DISTINCT的就不用GROUP BY
SELECT OrderID FROM Details WHERE UnitPrice > 10 GROUP BY OrderID
可改为: SELECT DISTINCT OrderID FROM Details WHERE UnitPrice > 10
2.能用UNION ALL就不要用UNION
UNION ALL不执行SELECT DISTINCT函数,这样就会减少很多不必要的资源
3.尽量不要用SELECT INTO语句。
SELECT INOT 语句会导致表锁定,阻止其他用户访问该表。
4.能够用BETWEEN的就不要用IN
5.exists代替in
select num from a where num in(select num from b)
可改为: select num from a where exists(select 1 from b where num=a.num)
6.避免在 where 子句中对字段进行表达式操作(计算、Format等等),这将导致引擎放弃使用索引而进行全表扫描。
如: SELECT * FROM T1 WHERE F1/2=100
应改为: SELECT * FROM T1 WHERE F1=100*2
SELECT * FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=‟5378‟
应改为: SELECT * FROM RECORD WHERE CARD_NO LIKE „5378%‟
SELECT member_number, first_name, last_name FROM members WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21
应改为: SELECT member_number, first_name, last_name FROM members WHERE dateofbirth < DATEADD(yy,-21,GETDATE())
即:任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
7.表中是否存在某条纪录不要用count(*)那样效率很低,而且浪费服务器资源。可以用EXISTS代替。
如: IF (SELECT COUNT(*) FROM table_name WHERE column_name = „xxx‟)
可以写成: IF EXISTS (SELECT * FROM table_name WHERE column_name = „xxx‟)
SELECT OrderID FROM Details WHERE UnitPrice > 10 GROUP BY OrderID
可改为: SELECT DISTINCT OrderID FROM Details WHERE UnitPrice > 10
2.能用UNION ALL就不要用UNION
UNION ALL不执行SELECT DISTINCT函数,这样就会减少很多不必要的资源
3.尽量不要用SELECT INTO语句。
SELECT INOT 语句会导致表锁定,阻止其他用户访问该表。
4.能够用BETWEEN的就不要用IN
5.exists代替in
select num from a where num in(select num from b)
可改为: select num from a where exists(select 1 from b where num=a.num)
6.避免在 where 子句中对字段进行表达式操作(计算、Format等等),这将导致引擎放弃使用索引而进行全表扫描。
如: SELECT * FROM T1 WHERE F1/2=100
应改为: SELECT * FROM T1 WHERE F1=100*2
SELECT * FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=‟5378‟
应改为: SELECT * FROM RECORD WHERE CARD_NO LIKE „5378%‟
SELECT member_number, first_name, last_name FROM members WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21
应改为: SELECT member_number, first_name, last_name FROM members WHERE dateofbirth < DATEADD(yy,-21,GETDATE())
即:任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
7.表中是否存在某条纪录不要用count(*)那样效率很低,而且浪费服务器资源。可以用EXISTS代替。
如: IF (SELECT COUNT(*) FROM table_name WHERE column_name = „xxx‟)
可以写成: IF EXISTS (SELECT * FROM table_name WHERE column_name = „xxx‟)
4 0
- 刚整理的SQL常见替代点
- 常见sql整理 常见hive sql整理
- SQL常见的可优化点
- 替代like写法的sql
- 整理的刚毕业学生理财建议
- 常见破解软件的优秀替代免费软件
- 三种常见的替代损失函数
- 刚需:用户的痛点在那里?
- 周围像素点的最大均方差替代该点
- 常见的类整理
- 整理常见的链表题
- 常见的三维点云数据下载链接,自己整理+网上收集
- SQL 返回刚插入数据的ID
- Tip - SMO: SQL-DMO的替代者
- 一个替代SQL NOTFOUND的算法
- 替代sql的in,not in操作
- 常见Oracle SQL易出错点
- 给刚出道的游戏开发人员的几点忠告
- extract audio track/stream from mp4
- MySQL 错误1418 的原因分析及解决方法
- MFC基本控件使用——列表控件(ListCtrl)
- POJ 2420 模拟退火法
- HTML中this与JQuery中$(this)的区别
- 刚整理的SQL常见替代点
- hdu4662 简单搜索打表
- URAL 1775 Space Bowling
- 白盒测试设计方法
- 有用的网址
- 黑盒测试设计方法
- jni指针和堆栈注意
- 使用 Intel HAXM 为 Android 模拟器加速,媲美真机
- Andriod Fragment---给Activity添加一个Fragment