首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《SQL开发样式指南》,让你的SQL代码更加规范

不要使用类似tbl或其他的描述性的前缀或匈牙利命名法。 表不应该同它的列同名,反之亦然。 尽量避免连接两个表的名字作为关系表(relationship table)的名字。...在代码中形成一个从上到下的“川流”,这样帮助读者快速扫描代码并将关键字和实现细节分开。川流在排版时应该避免,但是对书写SQL语句是有帮助的。...将值存入一列并将单位存在另一列。列的定义应该让自己的单位不言自明以避免在应用内进行合并。使用CHECK()来保证数据库中的数据是合法的。...EAV (Entity Attribute Value)表——用特殊的产品来处理无模式数据。 因为某些原因(如为了归档、为了划分跨国公司的区域)将能合并在一起的表分开。...这样的设计导致以后必须使用UNION操作而不能直接查询一个表。

36310

SQL 性能调优

(15) 用EXISTS替代IN、用NOT EXISTS替代NOT IN 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT...在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的(因为它对子查询中的表执行了一个全表遍历)....,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序....即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。...Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。

2.8K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    值得收藏:一份非常完整的 MySQL 规范

    无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁,更好的恢复性...2、禁止给表中的每一列都建立单独的索引 5.6版本之前,一个sql只能使用到一个表中的一个索引,5.6以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好 3、每个Innodb...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) · 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,...在Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引

    90130

    SQL多表查询常用语句总结

    一、多表关系 (一)概述 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多...(多对一):在多的一方建立外键,指向一的一方的主键 多对多:建立中间表,包含两个外键,分别关联两方主键 一对一:一对一关系多用于单标拆分,将一张表的基础字段放在一张表中,其他详细字段放在另一张表,以提升操作效率...(二)联合查询 联合查询-union,union all 对于union查询,就是把多查询的结果合并起来,形成一个新的查询结果集。...union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。 六、子查询 (一)概念: SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。...常用的操作符:=>>=<<= 列子查询(子查询结果为一列) 子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

    75060

    9个SQL优化技巧

    大多数的接口性能问题,很多情况下都是SQL问题,在工作中,我们也会定期对慢SQL进行优化,以提高接口性能。这里总结一下常见的优化方向和策略。...= 30;UNION操作符先查询满足name为'John'的记录,然后查询满足age为30的记录,并将两个结果集合并起来。...join的优化JOIN 是 SQL 查询中的一个操作,用于将两个或多个表连接在一起。JOIN 操作有几种类型,包括 LEFT JOIN、RIGHT JOIN 和 INNER JOIN。...INNER JOIN 用于获取两个表中的匹配行,LEFT JOIN 和 RIGHT JOIN 用于获取一个表中的所有行以及另一个表中的匹配行。...但是使用的时候要特别注意,左右表的关联关系,是一对一、一对多还是多对多,对查询的结果影响很大。

    20310

    SQL 性能调优

    在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的(因为它对子查询中的表执行了一个全表遍历)....,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序....在特定情况下, 使用索引也许会比全表扫描慢, 但这是同一个数量级上的区别. 而通常情况下,使用索引比全表扫描要块几倍乃至几千倍!...即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。...Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。

    3.2K10

    值得收藏:一份非常完整的 MySQL 规范

    无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁,更好的恢复性...2、禁止给表中的每一列都建立单独的索引 5.6版本之前,一个sql只能使用到一个表中的一个索引,5.6以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好 3、每个Innodb...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) · 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,...在Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引

    76430

    【MySQL】表的增删查改(进阶)

    一对多 4.多对多) 根据上述内容,套入到固定的“公式”中,然后就可以得到表。 一对一关系 在教务系统中,有一个实体,学生,还有一个实体,账号。...有课程名字(class表),有分数(分数表) 先对三张表进行笛卡尔积 引入连接条件()此处有两个引入条件需要同时满足 针对要求的列进行精简 同样是使用join on也可以进行三个表的查询...把多个SQL组合成一个。实际开发中,子查询要慎用!...子查询就是把两个操作合并~ 多行子查询 返回多行记录的子查询 任务:查询“语文”或者“英语课程的成绩信息” 分析:1.现根据名字查课程id 2.根据课程id查询课程分数 在这里插入图片描述...合并查询 本质上是吧两个查询的结果集,合并成一个。

    3.1K20

    SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势

    毕竟使用Hint,需要应用系统修改代码,Hint只能解决一条SQL的问题,并且由于数据分布的变化或其他原因(如索引更名)等,会导致SQL再次出现性能问题。...如果使用了NO_INDEX,但是没有指定任何索引,则会执行全表扫描。如果对某个索引同时使用了NO_INDEX和会之产生冲突的提示(如INDEX),这时两个提示都会被忽略掉。...当在一个联合索引中,某些谓词条件并不在联合索引的第一列时(或者谓词并不在联合索引的第一列时),可以通过index skip scan来访问索引获得数据。...通常在无法执行子查询合并的情况下,子查询扮演的都是检验者角色,所以子查询一般被放在最后执行。...假设将两个表连接在一起,从每个表返回的行集将被排序,然后再被合并(也就是合并排序),从而组成最终的结果集。由于每个行先被排序之后才进行合并,所以在给定查询中检索所有行时,速度将会最快。

    8.6K340

    23篇大数据系列(三)sql基础知识(史上最全,建议收藏)

    1.4  主键  主键是一列或多列的组合,用于标识表中唯一的一条记录。所以,它天然的一个属性就是不重复性,也不允许为NULL值。...2.6  分组聚合 分组聚合是指,我们可以将表中的数据,根据某一列或多列进行分组,然后将其他列的值进行聚合计算,如计数、求和和求平均值等。...2.7  去重  DISTINCT关键字用于对一列或多列去重,返回剔除了重复行的结果。DISTINCT对多列去重时,必须满足每一列都相同时,才认为是重复的行进行剔除。...4  关联查询与子查询 拥有了前面3部分的知识基础,那么我们就可以开始学习SQL的复杂查询。本文要讲的复杂查询有两个,一个是关联查询,一个是子查询。首先,我们先来看下他们的理论基础,集合运算。...也就是说,可以把查询执行的结果看做是一张中间表或临时表,继续参与运算,这就是子查询的理论基础。 集合运算主要包含四种,并集、交集、差集和笛卡尔积。 并集,是求两个集合合并后的集合。

    2.8K60

    MySQL-多表操作

    多表查询 联合查询 联合查询是多表查询的一种方式,在保证多个SELETE语句的查询字段数相同的情况下,合并多个查询的结果 SELECT··· UNION [ALL|DISTINCT] SELECT···...数据源表示一-个符合二维表结构的数据,如数据表。 ? 列子查询 列子查询:子查询返回的结果是一个字段符合条件的所有数据,即一列多行。...表子查询 表子查询:子查询的返回结果用于FROM数据源,它是一个符合二维表结构的数据,可以是一行一列、一列多行、一行多列或多行多列。...外键约束 添加外键约束 外键指的是-一个表中引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束, 从而保证数据的一-致性 和完整性。 ➢被引用的表称为主表。...ON DELETE与ON UPDATE用于设置主表中的数据被删除或修改时,从表对应数据的处理办法。 ? 关联表操作 实体之间具有一对一、一对多和多对多的联系。

    3.2K20

    SQL优化

    即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 2....我们一起来看一个例子,假定有一个职工表(employee),对于 一个职工的姓和名分成两列存放(FIRST_NAME和LAST_NAME),现在要查询一个叫比尔.克林顿(Bill Cliton)的职工。...下面是一个采用联接查询的SQL语句,这条语句完全可以查询出是否有Bill Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有使用。...二、写优良SQL的基本规则 1、对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。...任何在Order by语句的非索引项或者有计算表达式都将降低查询速度 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如select id from

    4.8K20

    值得收藏:一份非常完整的 MySQL 规范

    ,会造成列上的索 引失效,导致查询效率降低) 二、数据库基本设计规范 1、所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用...2、禁止给表中的每一列都建立单独的索引 5.6版本之前,一个sql只能使用到一个表中的一个索引,5.6以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好 3、每个Innodb...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) · 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,...在Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引

    97530

    编写高性能SQL

    在多数情况下,Oracle使用索引来更快的遍历表,优化器主要根据定义的索引来提高性能。...IS NULL 与 IS NOT NULL    不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样之情况下,只要这些列中有一列含有null,该列就会从索引中排除。...下面是一个采用联接查询的SQL语句, 上面这条语句完全可以查询出是否有Bill Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有使用。   ...NOT    我们在查询时经常在where子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用and(与)、or(或)以及not(非)。NOT可用来对任何逻辑运算符号取反。    ...第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。  6. IN和EXISTS    有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。

    2.3K20

    如何写出更快的 SQL (db2)

    首先要明白什么是执行计划 执行计划是数据库根据 SQL 语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条 SQL 语句如果用来从一个 10 万条记录的表中查 1...比如现在有个这样的需求:有两个客户信息表 custinfo_a、 custinfo_b ,主健都是客户号 custid,现要求对这两个表的信息进行整合,要求合并后的表主健仍是 custid,如果同一个...即使索引有多列这样的情况下,只要这些列中有一列含有 NULL ,该列就会从索引中排除。也就是说如果某列存在 NULL 值,即使对该列建索引也不会提高性能。...在这种情况下, 使用EXISTS(或 NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN 子句将执行一个内部的排序和合并。...无论在哪种情况下,NOT IN 都是最低效的(因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.

    2.2K20

    能写数据后台,需要掌握哪些进阶的sql语句?

    举个实例来拆解元知识点 在本篇笔记中,我也先举一个实例用作知识点拆解,如下,该述语句的作用是:统计每天具有学习行为的用户数。注:学习行为其实包含多种具体的行为,分布在两个表中。...用union合并数据行 上方实例被 with data as() 括起来的部分,其实是两个表满足条件的数据合并。抽象一下如下。...【语句块X】 union all 【语句块Y】 处理表格数据的合并时,细分有以下三个情形: 把多列或多行的数据,合并为单列或单行的数据 把A表的数列,与B表的数列合并起来 把A表的数行,与B表的数行合并起来...多表联合查询 最后说明下,相对复杂的多表查询。从多个表格、或表格和自定义数据源如data中合并查询。...一个相对简单的实例如下,根据输入变量 user_name 从 users_extra 查询到 user_id,然后用 user_id 去user_activities 表查询。

    1.2K30

    数据库性能优化之SQL语句优化

    不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。...推荐方案:采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。...Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。...在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)....(28) 用UNION-ALL 替换UNION ( 如果有可能的话): 当SQL 语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序.

    5.7K20

    这是我见过最有用的Mysql面试题,面试了无数公司总结的(内附答案)

    有各种数据库关系,即 1.一对一的关系 2.一对多的关系 3.多对一的关系 4.自指关系 23.什么是查询? 数据库查询是从数据库表或表组合中获取数据或信息的请求。...外部联接:外部联接从两个表返回行,这些行包括与一个或两个表不匹配的记录。 36.什么是SQL约束? SQL约束是在数据库中插入,删除或更新数据时实施一些约束的一组规则。 37....假设表中有一个字段是可选的,并且可以在不向可选字段添加值的情况下插入记录 则该字段将以NULL值保存。 46. NULL值,零和空白之间有什么区别?...NOT NULL约束用于确保字段中的值不能为NULL 49.什么是CHECK约束? CHECK约束用于限制一列或多列接受的值。 例如,“年龄”字段应仅包含大于18的值。...在SQL Server中,数据库表中的每一列都有一个名称和一种数据类型。 在创建SQL表时,我们需要决定在表的每一列中存储哪种数据类型。 57.可以在BOOLEAN数据字段中存储哪些可能的值?

    27.2K20

    Power Pivot中忽略维度筛选函数

    返回 表——包含已经删除过滤器后的一列或多列的表。 C. 注意事项 通常和filter组合,如果是列名需要是filter处理的列名 1个参数只能写1个条件,列和表不能同时出现。...返回 表——包含已经删除过滤器后的一列或多列的表。 C. 注意事项 第1参数是表,第2参数是列,而All函数的第1参数是表或者列。...分列数据的方法比较 如何用Power Query处理Excel中解决不了的分列 Power Query中如何把多列数据合并? Power Query中如何把多列数据合并?...(合并查询) 函数应用案例: 如何快速找出包含英文关键词的数据?...(合并查询) 如何快速的根据要求判断各个店铺/仓库是否断码?(动态引用,分组依据,透视,替换,合并列) 如何通过汇总来实现多行数据合并成一行?

    8K20

    PostgreSQL 教程

    连接多个表 主题 描述 连接 向您展示 PostgreSQL 中连接的简要概述。 表别名 描述如何在查询中使用表别名。 内连接 从一个表中选择在其他表中具有相应行的行。...数据分组 主题 描述 GROUP BY 将行分成组并对每个组应用聚合函数。 HAVING 对组应用条件。 第 5 节. 集合运算 主题 描述 UNION 将多个查询的结果集合并为一个结果集。...INTERSECT 组合两个或多个查询的结果集并返回一个结果集,该结果集的行都出现在两个结果集中。 EXCEPT 返回第一个查询中未出现在第二个查询的输出中的行。 第 6 节....重命名表 将表的名称更改为新名称。 添加列 向您展示如何向现有表添加一列或多列。 删除列 演示如何删除表的列。 更改列数据类型 向您展示如何更改列的数据。 重命名列 说明如何重命名表中的一列或多列。...PostgreSQL 技巧 主题 描述 如何比较两个表 描述如何比较数据库中两个表中的数据。 如何在 PostgreSQL 中删除重复行 向您展示从表中删除重复行的各种方法。

    61810
    领券