博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 优化
阅读量:7196 次
发布时间:2019-06-29

本文共 1423 字,大约阅读时间需要 4 分钟。

sql语法及执行顺序

查询的书写顺序依次为

(1) SELECT

(2) DISTINCT <select_list>

(3) FROM <left_table>

(4) <join_type> JOIN <right_table>

(5) ON <join_condition>

(6) WHERE <where_condition>

(7) GROUP BY <group_by_list>

(8) HAVING <having_condition>

(9) ORDER BY <order_by_condition>

(10) LIMIT <limit_number>

其中select和from是必须的,其他关键词是可选的,这些关键词的执行顺序 与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行

(1) FROM <left_table>

(2) ON <join_condition>

(3) <join_type> JOIN <right_table>

(4) WHERE <where_condition>

(5) GROUP BY <group_by_list>

(6) HAVING <having_condition>

(7) SELECT

(8) DISTINCT <select_list>

(9) ORDER BY <order_by_condition>

(10) LIMIT <limit_number>

简单总结一下sql优化的注意点

1、写明查询具体某几列,减少select *的使用,表名过长时,尽量使用表的别名

2、在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。

  • in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。

  • 其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

3、模糊查询like,尽量少用%

  • 关键词%yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%

4、having、where二者都能使用尽量使用where

5、尽量使用多表连接(join)查询(避免子查询)

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

6、建立索引

  • 较频繁地作为查询条件的字段,唯一性不太差的字段适合建立索引,更新不太频繁地字段适合创建索引,不会出现在where条件中的字段不该建立索引

7、多使用内部函数提高SQL效率

  • 例如:多用concat连接,代替'||' 的符号连接

8、应尽量避免在 where 子句中使用 != 或 <> ,in 或 not in

  • 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库 (不然会进行全表扫描,影响效率)

9、尽可能的使用 varchar/nvarchar 代替 char/nchar (节省字段存储空间)

转载地址:http://uwakm.baihongyu.com/

你可能感兴趣的文章
Mysql知识点整理
查看>>
mysql基础
查看>>
红黑树上
查看>>
微信小程序高级基础
查看>>
java b2b2c o2o spring cloud spring boot 商城系统-系统平台功能导图
查看>>
String、StringBuffer、StringBulider比较和使用
查看>>
讲述我在阿里六面的经历,分享给大家(Java岗)
查看>>
Flutter Widget简介
查看>>
静态资源缓存机制之利用HTTP缓存
查看>>
iOS逆向(2)-密码学(Hash&对称加密)
查看>>
组件化学习笔记 一
查看>>
Realm ios踩坑笔记
查看>>
什么是算法?如何学习算法?算法入门
查看>>
电子商务javaweb b2b b2c o2o平台
查看>>
解决WebStorm里require报错问题
查看>>
03 UITableView 刚进来的时候无法滚动到到底部
查看>>
js,forEach的理解
查看>>
MongonDB入门
查看>>
Flutter混合开发二-FlutterBoost使用介绍
查看>>
Javascript设计模式之职责链模式
查看>>