前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL优化总结之二

SQL优化总结之二

作者头像
Kevin_Zhang
发布2018-07-05 16:22:25
4300
发布2018-07-05 16:22:25
举报
文章被收录于专栏:Kevin-ZhangCGKevin-ZhangCG

1.列优先

如图有表A和表B,对其查询时,会有如下语句:

select  a.*,b.*
 
from  a,b
 
where  a.id = b.a_id;

注意from 后边的表名,

  a.如果多表查询是完全无关系的话,将记录和列名最少的表(from后靠右的位置接列少的表),写在最后,然后依次类推

  b.如果多表查询是有关系的话,将引用最多的表(from后靠右的位置接列多的表),放在最后,然后依次类推

这样速度会有所提高。

2.where子句中的连接顺序(where也采用从右往左解析)

当使用where子句连接的时候,要将可以过滤掉最大数量记录的条件写在WHERE子句的最右

例如

select emp.empno,emp.ename,emp.sal,dept.dname from emp,dept where (emp.deptno = dept.deptno) and (emp.sal > 1500)

这样,可以过滤掉大量数据后,在执行其他条件,可以提高效率

3.减少使用 * 代替列名

select * from user;

要写成 select userID ,userName,userSalary  from user;

因为使用* ,数据库还得查询数据字典,然后解析列名,直接写列名会调高效率。

4.删除所有记录都得时候,用TRUNCATE替代DELETE

因为delete删除表时,会扫描整个表,然后再一条一条删除

而TRUNCATE table user;  是一次性删除整个表的所有内容,会提高效率。

5.尽量多使用COMMIT

因为COMMIT会释放回滚点 callback

6.用WHERE子句替换HAVING子句

WHERE先执行,HAVING后执行,因为having会先分组,比较占内存。

7.多使用内部函数提高SQL效率

例如多用concat连接,代替'||' 的符号连接

8.表名过长时,尽量使用表的别名

例如 salgrade s   长表名更加的耗费扫描时间

9.尽量使用列的别名

例如 :ename e  同表名

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.列优先
  • 2.where子句中的连接顺序(where也采用从右往左解析)
  • 3.减少使用 * 代替列名
  • 4.删除所有记录都得时候,用TRUNCATE替代DELETE
  • 5.尽量多使用COMMIT
  • 6.用WHERE子句替换HAVING子句
  • 7.多使用内部函数提高SQL效率
  • 8.表名过长时,尽量使用表的别名
  • 9.尽量使用列的别名
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档