文档章节

mysql优化

ericSM
 ericSM
发布于 2016/07/07 16:40
字数 518
阅读 25
收藏 5

一 查询的逻辑执行顺序

FROM < left_table>

< join_type>  JOIN < right_table>   ON < join_condition>

WHERE < where_condition>

GROUP BY < group_by_list>

WITH {cube | rollup}

HAVING < having_condition>

SELECT   DISTINCT < top_specification>  < select_list>

ORDER BY < order_by_list>

LIMIT <offset> <length>

二 执行顺序

1.FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1

2.ON:对vt1表应用ON筛选器只有满足< join_condition> 为真的行才被插入vt2

3.OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2 生成t3如果from包含两个以上表则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束

4.WHERE:对vt3应用 WHERE 筛选器只有使< where_condition> 为true的行才被插入vt4

5.GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5

6.CUBE|ROLLUP:把超组(supergroups)插入vt6 生成vt6

7.HAVING:对vt6应用HAVING筛选器只有使< having_condition> 为true的组才插入vt7

8.SELECT:处理select列表产生vt8

9.DISTINCT:将重复的行从vt8中去除产生vt9

10.ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10

11.LIMIT:从vc10的开始处选择指定位置,指定数量的行生成vt11 并返回调用者

性能与团队开发必守规范

1.不要写SELECT * 的语句,而是选择你需要的字段

2.连接多表时, 每个Column上使用表的别名.就可以减少解析的时间并减少那些由Column歧义引起的语法错误和方便团队维护。

如有表table1(ID,col1)和table2 (ID,col2)

Select A.ID, A.col1, B.col2

— Select A.ID, col1, col2 –不要这么写,不利于将来程序扩展

from table1 A inner join table2 B on A.ID=B.ID Where …

3.合理写WHERE子句,不要写没有WHERE的SQL语句,

 正在显示第 0 - 24 行 (共 11755 行, 查询花费 0.0002 秒。)

SELECT * FROM `ent_****_datacenter_field_metadata` WHERE 1

稳定,速度快

4.NOT IN、NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法

 

 

© 著作权归作者所有

共有 人打赏支持
ericSM
粉丝 15
博文 116
码字总数 92169
作品 0
南京
项目经理

暂无文章

js实现产生n个随机数,并且随机数之和是固定值

function getrandom(minnum , maxnum ,total,size){ var num = total; //定义整数 var length= size; //定义多个整数的数量 var numArr = []; while(length > 1){ var rnd = Math.floor(Mat......

开源昕昕
3分钟前
0
0
精选Spring Boot三十五道必知必会知识点!

Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家。本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spring Boot、Spring MVC 和 Sp...

Java填坑之路
5分钟前
1
0
MyBatis学习笔记

相关文档 mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译 MyBatis 处理sql中的 大于,小于,大于等于,小于等于

OSC_fly
6分钟前
0
0
Gradle从不同地方复制文件到一个文件夹/打zip包

复制 task copySDK(type: Copy, dependsOn: [":fatJarTask"]) { delete JAR_NAME delete SDK_OUT_PATH delete "$ROOT_BUILD_PATH/$SDK_ZIP_NAME" into('/jniLibs') {......

SuShine
6分钟前
0
0
CentOS关闭占用端口,修改Apache默认端口,并重启Apache

查找并关闭进程 在Linux系统中可以使用lsof命令和kill命令,两个命令配合查找并关闭占用端口的进程 查看某一端口使用情况的命令: lsof -i:端口号 效果如下,PID即进程的ID 根据PID关闭进程,...

临江仙卜算子
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部