UNION教你如何用Where子句,中的连接顺序

xzdxmynet 发布于 2024-01-25 阅读(97)

SQL语句优化方法详细介绍

1. 选择最有效的表名顺序。 FROM 子句中最后写入的表(基表)将首先被处理。 当FROM子句中包含多个表时,必须选择记录数。 最小的表用作基本表。 你太无耻了! ! 我曾经认为表只有多条记录。 难怪我之前写的查询这么慢。

2.Where子句中的连接顺序。 :

数据库使用自下而上的顺序来解析Where 子句。 根据这个原则,表之间的连接必须写在其他Where条件之前,而那些能够过滤出最大记录数的条件必须写在Where子句的末尾。 最后。 这个好像一直都是这样写的,不过是在里面,前面用的是JOIN。

3. 集成简单、非关联的数据库访问:

如果您有多个简单的数据库查询语句,您可以将它们集成到一个查询中(即使它们之间没有关系)。 我没有经历过这个。 看起来是按照业务逻辑分成小块的。 哪里

4. 尽量缩小子查询的结果范围。

5.用IN代替IN,用NOT代替NOT IN。 看来我在做项目的时候,只是根据条件进行一些表连接,基本不使用IN和NOT IN。

6. 避免对索引列使用计算。

在Where子句中,如果索引列是函数的一部分。 优化器不会使用索引并使用全表扫描。 7、使用>=代替>。 这个我不是特别明白。 > 不是吗?

8、将OR替换为UNION(适用于索引列)

一般情况下,将Where子句中的OR替换为UNION会有更好的效果。 对索引列使用 OR 将导致全表扫描。 请注意,上述规则仅对多个索引列有效。 如果没有索引,可能会因为没有选择OR而降低查询效率。 在下面的示例中,索引基于 和 构建。 我在项目中也遇到过这种情况。 我写了一个临时表函数,其他SQL需要连接临时表,因为业务逻辑复杂,连接速度很慢。 后来OR改为UNION ALL。

9. 避免在索引列上使用 IS NULL 和 IS NOT NULL

10.避免改变索引列的类型

11.Where子句要注意:

某些语句中的Where子句不使用索引。 这里有些例子。

在下面的示例中,(1)'!=' 将不使用索引。 请记住,索引只能告诉您表中有什么,而不能告诉您表中没有什么。 (2)“||” 是一个字符连接函数。 与其他功能一样,索引被禁用。

(3)“+”是一个数学函数。 与其他数学函数一样,索引被禁用。 (4) 相同的索引列不能相互比较,这将启用全表扫描。

12、优化GROUP BY:通过过滤掉GROUP BY之前不需要的记录,提高GROUP BY语句的效率。

13.避免使用资源密集型操作:

带有 UNION,MINUS,,ORDER BY 的 SQL 语句将启动 SQL 引擎

执行资源密集型排序 (SORT) 功能。 需要一次排序操作,而其他则需要至少两次排序操作。 通常,带有UNION、MINUS的SQL语句可以用其他方式重写。 如果你的数据库配置得好,你也可以考虑使用UNION和MINUS,毕竟它们的可读性很强。

在SSMS中,如果您想查看一个查询执行了多少CPU时间,您可以使用以下流程:

设定开启

设置时间

您的查询

设定休息时间

在此之后你必须不看

【SQL语句优化方法详细介绍】相关文章:

1.有SQL语句优化经验

2. SQL语句优化问题教程

3.SQL语句编写及优化规范

4、sql语句优化知识

5.SQL优化百科

六、关于让MySQL记录执行的SQL语句的方法

7.Yii使用command执行sql语句的方法

8.如何使用sql语句查询日期

标签:  索引 语句 排序 貌似 替代 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。