要养成良好的书写Sql的习惯
11页1、要养成良好的书写要养成良好的书写 SqlSql 的习惯的习惯我们做软件开发的,大部分人都离不开跟数据库打交道,特别是 erp 开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我么还能保证下一段时间系统还能流畅的运行吗?我么还能保证下一个人能看懂我么的存储过程吗?那么我结合公司平时的培训和平时个人工作经验和大家分享一下,希望对大家有帮助。要知道 SQL 语句,我想我们有必要知道 SQL Server 查询分析器怎么执行我们的SQL 语句的,我们很多人会看执行计划,或者用 Profiler 来监视和调优查询语句或者存储过程慢的原因,但是如果我们知道查询分析器的执行逻辑顺序,下手的时候就胸有成竹,那么下手是不是有把握点呢?一、查询的逻辑执行顺序(1) FROM left_table(3) join_type JOIN right_table (2) ON join_condition(4) WHERE where_condition(5) GROUP BY group_by_list(6) WITH cube | rollup(7) HAVING ha
2、ving_condition(8) SELECT (9) DISTINCT (11) top_specification select_list(9) ORDER BY order_by_list标准的 SQL 的解析顺序为:(1) FROM 子句 组装来自不同数据源的数据(2) WHERE 子句 基于指定的条件对记录进行筛选(3) GROUP BY 子句 将数据划分为多个分组(4) 使用聚合函数进行计算(5) 使用 HAVING 子句筛选分组(6) 计算所有的表达式(7) 使用 ORDER BY 对结果集进行排序二、执行顺序1. FROM:对 FROM 子句中前两个表执行笛卡尔积生成虚拟表 vt12. ON: 对 vt1 表应用 ON 筛选器只有满足 join_condition 为真的行才被插入 vt23. OUTER(join):如果指定了 OUTER JOIN 保留表(preserved table)中未找到的行将行作为外部行添加到 vt2,生成 t3,如果 from 包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束。4. WHERE:对 vt3
3、应用 WHERE 筛选器只有使 where_condition 为 true 的行才被插入 vt45. GROUP BY:按 GROUP BY 子句中的列列表对 vt4 中的行分组生成 vt56. CUBE|ROLLUP:把超组(supergroups)插入 vt6,生成 vt67. HAVING:对 vt6 应用 HAVING 筛选器只有使 having_condition 为 true 的组才插入 vt78. SELECT:处理 select 列表产生 vt89. DISTINCT:将重复的行从 vt8 中去除产生 vt910. ORDER BY:将 vt9 的行按 order by 子句中的列列表排序生成一个游标 vc1011. TOP:从 vc10 的开始处选择指定数量或比例的行生成 vt11 并返回调用者看到这里,那么用过 Linq to SQL 的语法有点相似啊?如果我们我们了解了 SQL Server 执行顺序,那么我们就接下来进一步养成日常 SQL 的好习惯,也就是在实现功能的同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所谓集合运算实
4、际就是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL 语句或者存储过程代替。三、只返回需要的数据返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:A、横向来看(1) 不要写 SELECT * 的语句,而是选择你需要的字段。(2) 当在 SQL 语句中连接多个表时, 请使用表的别名并把别名前缀于每个 Column上。这样一来,就可以减少解析的时间并减少那些由 Column 歧义引起的语法错误。1如有表 table1(ID,col1)和 table2(ID,col2)1Select A.ID, A.col1, B.col22- Select A.ID, col1, col2 不要这么写,不利于将来程序扩展3from table1 A inner join table2 B on A.ID=B.ID Where B、纵向来看(1) 合理写 WHERE 子句,不要写没有 WHERE 的 SQL 语句。(2) SELECT TOP
《要养成良好的书写Sql的习惯》由会员m****分享,可在线阅读,更多相关《要养成良好的书写Sql的习惯》请在金锄头文库上搜索。
DB2发生死锁情况时应该怎么处理
Python 为何能成最强编程语言
面试前必须要知道的Redis面试
MySQL下自动删除指定时间以前的记录的操作方法
深入理解FastCGI协议以及在PHP中的实现
MySQL数据库性能优化之硬件瓶颈分析
NoSQL数据库大全收集整理
2018 – 2019 年前端 JavaScript 面试题
PHP文件包含漏洞的形式总结
5种使用Python代码轻松实现数据可视化的方法
改进JavaScript和Bust的互操作性:深入认识wasm-bindgen组件
C#图片缩放平移从功能分析到编码实现
详解网络蜘蛛的安全隐患及预防方法
利用NAP解除安全隐患自动隐藏你的IP地址
解决分布式数据库和离线网络中原子性问题的新方法
bbed恢复数据遇到延迟块清除的问题
Oracle Data Redaction数据加密
linux下du和df结果不一致的原因及处理
基于QMP实现对qemu虚拟机进行交互
解读Java并发队列BlockingQueue
2023-06-30 7页
2022-09-15 93页
2022-06-04 27页
2022-04-25 3页
2022-03-24 7页
2022-03-24 7页
2022-03-24 8页
2022-03-24 4页
2022-03-24 43页
2022-03-24 7页