`
1000copy
  • 浏览: 74374 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

改善sql字符串的可读性(4) - 多Join拼接的性能测试

阅读更多

 

测试,当on的条件为false的时候,join是否会被优化?

 

-- 插入测试表

CREATE TABLE person        (id INT NOT NULL ,NAME VARCHAR(20));

CREATE TABLE bill        (id INT NOT NULL ,NAME VARCHAR(20),personId INT );

 

-- 插入测试数据

DELETE FROM person;

INSERT INTO person  VALUES(1,"martin fowler");

INSERT INTO person  VALUES(2,"rebert martin");

 

-- 插入测试数据

DELETE FROM bill;

INSERT INTO bill  VALUES(1,"bill1",1);

INSERT INTO bill VALUES(2,"bill2",1);

INSERT INTO bill VALUES(2,"bill2",3);

SELECT * FROM bill;

 

// mysql 是不能优化掉的,执行计划内有person

EXPLAIN SELECT bill.* FROM bill LEFT JOIN person ON FALSE AND bill.personId = person.id

 

同样的测试,sqlserver可以优化掉。

即使select内有person的字段也可以。相见 执行计划

SELECT bill.*,person.* FROM bill LEFT JOIN person ON 1=0 aND bill.personId = person.id

 

0
0
分享到:
评论
2 楼 1000copy 2010-06-23  
mercyblitz 写道
MySQL的SQL解析不强吗,呵呵

也许是因为mysql没有想到有人会这样用吧:)
1 楼 mercyblitz 2010-06-23  
MySQL的SQL解析不强吗,呵呵

相关推荐

    将SQL字符串按不同开发语言格式化

    在实际应用中,SQL字符串的格式化不仅关乎美观,更是直接影响到代码的可读性和维护性。尤其是在大型项目中,一致的代码风格对于团队协作至关重要。因此,理解并掌握如何使用这样的工具,是每个IT专业人员提升专业...

    Go-sqrl-SQL查询构建器Squirrel的分支并改进了性能

    10. **测试与调试**:由于Go-sqrl的SQL语句是通过代码构建的,因此在测试和调试时,可以很容易地查看生成的SQL字符串,确保其符合预期。 掌握Go-sqrl不仅可以提升Go语言数据库应用的开发效率,还能确保代码的安全性...

    Transact-SQL编程规范

    - 使用参数化SQL查询,避免字符串拼接,减少SQL注入风险。 - 避免使用中文拼音与英文混合命名SQL对象或变量,提高代码一致性。 - 引入存储过程,将复杂逻辑封装,提高代码复用。 1. 命名规范 - 推荐使用Pascal...

    Go-Go-SQLBuilder是一个用于创建SQL语句的工具函数库

    Go-SQLBuilder解决了这个问题,它允许开发者使用结构化的方式构建SQL,避免了字符串拼接带来的问题,降低了SQL注入的风险。 Go-SQLBuilder的核心功能包括: 1. **链式操作**:通过一系列的链式调用,如`Select()`,...

    Javascript中拼接大量字符串的方法

    这种方法简单直观,但当需要拼接的字符串很多时,代码会变得很长且难以阅读。 另一种方法是利用模板字符串(Template literals),也称为模板字面量,它允许我们在字符串中直接插入变量并支持多行。模板字符串用反...

    SqlBuilder

    它提供了构建WHERE子句、ORDER BY子句、JOIN子句等的API,可以根据条件动态添加或修改SQL片段,避免了硬编码SQL字符串的问题。 SqlBuilder的核心功能包括: 1. **条件构造**:通过条件对象或者表达式来构造WHERE...

    SQL编码规范.doc

    若有多个列,每个列名独立一行,并相对于`SELECT`向右缩进8个空格(C#中的SQL字符串无需缩进)。 - `FROM`子句中的表名或联接条件也应独立一行。 - 使用`WHERE`子句时,条件应逐一列出,每个条件占一行,复杂的...

    SQL入门常见问题总结与实用技巧介绍.docx

    参数化查询能够帮助防御SQL注入攻击,并且在大多数情况下性能优于字符串拼接。 - 适当地使用预编译SQL语句提高执行效率。预编译可以减少编译和解析的时间,对于经常执行的SQL语句来说尤为重要。 - **存储过程与...

    MyBatis之动态SQL-资料

    在传统的Java编程中,我们通常需要手动拼接SQL字符串,这容易导致SQL注入问题,并且难以维护。MyBatis通过标签和表达式来实现动态SQL,使得SQL的编写更加简洁、安全。 二、动态SQL的常用标签 1. `<if>`:用于条件...

    分离valuelist的sql拼装

    - **字符串连接**:最基础的方法是通过字符串连接函数,如Python中的`join()`或Java中的`StringBuilder`,逐个添加元素到SQL语句中。 - **模板引擎**:使用如Jinja2(Python)或FreeMarker(Java)等模板引擎,...

    本人提供SQL语句大全(转载) 12009年04月28日 星期二 19:35SQL语句大全(转载)

    - 避免不必要的字符串拼接或类型转换,如直接使用数值比较而非字符串比较。 - 在比较日期时,直接使用日期函数而非字符串函数可以提高效率。 ### 10. GROUP BY 和 HAVING 子句的使用 - **GROUP BY**:用于将数据...

    mybatis-demo11-动态SQL语句.zip

    这样可以避免在多个条件拼接时产生不必要的AND或OR,提高SQL的可读性: ```xml SELECT * FROM user != null">name = #{name} != null">AND age = #{age} ``` 5. **Trim标签**: `<trim>`标签与`...

    sql反射模式完整版

    1. **过度依赖动态SQL**:在编程时,过度使用字符串拼接生成SQL语句可能导致SQL注入攻击,同时也降低了代码的可读性和可维护性。最佳实践是使用参数化查询或存储过程来避免这类问题。 2. **不恰当的数据类型选择**...

    Java常用工具类,字符串、日期、jdbc、xml解析等等

    此外,`StringBuilder`和`StringBuffer`类在进行字符串拼接时能提供更高的性能,因为它们是线程安全的。 - `Pattern`和`Matcher`:用于正则表达式的匹配和查找。 - `StringUtils`(Apache Commons Lang):提供了...

    数据库函数

    4. **字符串拼接**:在每次循环中,都会将`Name`字段的值与当前`s`变量的值相加,并更新`s`变量。每个名字之间使用逗号`,`作为分隔符。 5. **移除第一个逗号**:最后使用`STUFF`函数移除`s`变量中的第一个逗号,确保...

    SQL语句切换.rar

    在易语言中,你可以创建SQL命令模板,并将变量作为参数传递,这样可以避免直接拼接字符串导致的安全问题。 4. **事务处理**:在进行多个SQL语句切换时,事务处理是非常重要的。事务确保一系列操作要么全部成功,...

    sql脚本 实用

    - **动态SQL**:使用变量和字符串拼接来构建动态的SQL语句,适用于需要运行复杂查询的场景。 - **应用示例**: - 在实际开发中,可以根据业务需求灵活运用上述技巧来编写高效的SQL脚本。 - 比如,当需要对大量...

    数据库SQL编程规范

    4. **参数化查询**:推荐使用参数化查询而非字符串拼接,这有助于防止SQL注入攻击,并提高代码的安全性。 5. **命名规则**:禁止使用混合拼音和英文的方式命名SQL对象或变量,以确保代码的一致性和可读性。 6. **...

    Transact-SQL编程规范[参考].pdf

    - 参数化SQL查询优于字符串拼接,可防止SQL注入并提高代码安全性。 - 避免混合使用拼音和英语命名SQL对象或变量,以保持命名的一致性。 - 强烈推荐使用存储过程,因为它们可以封装逻辑,提高代码复用性。 2. ...

    达梦数据库_SQL语言手册

    - **1.5.2 字符串表达式**: 支持字符串连接、拼接等操作。 - **1.5.3 时间值表达式**: 支持日期和时间的计算。 - **1.5.4 时间间隔值表达式**: 支持时间间隔的运算。 - **1.5.5 运算符的优先级**: DM_SQL定义了...

Global site tag (gtag.js) - Google Analytics