• sql优化


    SQL语句方面

    1)写明查询具体某几列,减少*的使用

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

    =》只有用到的列才查出来,可以减少数据量

     

    2)删除所有记录的时候,用TRUNCATE替代DELETE

    =》因为delete删除表时,会扫描整个表,然后再一条一条的删除;而TRUNCATE是一次性删除整个表的所有内容,会提高效率;

     

    3)在使用分组查询时,二者都能使用时,尽量使用where子句代替having子句

    =》因为where限制性,having后执行;having会先分组,比较占内存;

     

    4)多用内部函数提高SQL效率

    =》例如用concat()连接函数,代替'||'的符号连接(||是ORACLE的语法)

     

    5)表名过长时,尽量使用表的别名

    =》因为长表名更加的耗费扫描时间

    =》这里的意思不是说建表时的表名,而是指在写SQL语句时,因为我们经常会用到表名.列名

    在SQL语句中一旦指定了表别名,则不能再使用"表名称.列名"格式,只能使用"表别名.列名"格式来引用列.

    SELECT * FROM demo_class AS t1 WHERE t1.`class_unid`='1'

    列的别名就没这么必要了

     

    6)尽量使用多表连接查询,避免子查询

    =》子查询效率特别低,而一般的子查询都可以由关连查询来实现相同的功能,关联查询的效率要提高很多,所以建议在数据查询时避免使用子查询(尤其是在记录很多时),而最好用关联查询来实现。

    =》

    MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高。

    子查询:把内层查询结果当作外层查询的比较条件

    执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。

    优化方式:可以使用连接查询(JOIN)代替子查询,连接查询不需要建立临时表,因此其速度比子查询快。

    举例:有班级表、学生表,我要查询年龄最大的学生所处的班级的名称

    子查询和连接查询的对比就出来了
     
     
    备注
    1)这个模糊查询like的论述,我觉得是错误的
     
    2)关于in和exists的效率比较,有点扯
     
    3)where子句中的连接顺序(where也采用从右往左解析),这个不知是否有用
     
     
     
    学习资料
     
     
     
    为什么子查询比连接查询效率低   https://www.jianshu.com/p/cb1e14c0ac39
     
     
     
     
     
     
  • 相关阅读:
    增强iOS应用程序性能的提示和技巧(25个)
    [iOS]用instancetype代替id作返回类型有什么好处?
    把cygwin加入右键菜单
    NSRange
    Centos7下安装MySQL
    (转)php 操作redis全部方法。
    unbuntu 安装php5.6
    unbuntu 安装nginx
    unbuntu 安装MySQL
    Ubuntu16.04下实现MySQL主从复制
  • 原文地址:https://www.cnblogs.com/syjp/p/10406915.html
Copyright © 2020-2023  润新知