- 主题:mysql的执行顺序和索引
mysql执行sql的顺序从 From 开始,以下是执行的顺序流程
1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1
2、JOIN table2 所以先是确定表,再确定关联条件
3、ON table1.column = table2.column 确定表的绑定条件 由Temp1产生中间表Temp2
4、WHERE 对中间表Temp2产生的结果进行过滤 产生中间表Temp3
5、GROUP BY 对中间表Temp3进行分组,产生中间表Temp4
6、HAVING 对分组后的记录进行聚合 产生中间表Temp5
7、SELECT 对中间表Temp5进行列筛选,产生中间表 Temp6
8、DISTINCT 对中间表 Temp6进行去重,产生中间表 Temp7
9、ORDER BY 对Temp7中的数据进行排序,产生中间表Temp8
10、LIMIT 对中间表Temp8进行分页,产生中间表Temp9
我的困惑是
既然产生中间表,那索引是怎么起作用的?
尤其是order by在select之后
select都选出字段了,order by还怎么走索引?
--
FROM 103.37.140.*
你这显然是理论模型不是工程实现啊
【 在 sjfdesolve 的大作中提到: 】
: mysql执行sql的顺序从 From 开始,以下是执行的顺序流程
: 1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1
: 2、JOIN table2 所以先是确定表,再确定关联条件
: ...................
--
FROM 222.186.150.*
工程实现是怎样的
【 在 javafish 的大作中提到: 】
: 你这显然是理论模型不是工程实现啊
--
FROM 111.196.123.*
不清楚细节,但显然索引是有用的
如产生临时表,这个索引是有用的 举例ON如果都是主建,相当于两个有序集合就交集。反之不是
where语句,如果是在索引中的条件(假设索引有效),可以先执行。反之,where可以后执行。
orderby和select,显然如果orderby的字段是主健或者索引,那么select根据主健和索引,已经是有序,不需要处理。反之,select后的集合在排序,这个时候就是NlogN了
【 在 sjfdesolve 的大作中提到: 】
: 工程实现是怎样的
:
--
FROM 120.244.162.*