MySQL选择驱动表与被驱动表是基于优化器优化后的,小表是驱动表,大表是被驱动表。 基于优化器优化后开篇的 博文A与B 结论成立。
创新互联公司-专业网站定制、快速模板网站建设、高性价比兴县网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式兴县网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖兴县地区。费用合理售后完善,十余年实体公司更值得信赖。
table中检索到与之匹配的行。Outer table: 小表、驱动表 Inner table: 被驱动表、大表 (可用ordered提示来改变CBO默认的驱动表,可用USE_NL(table_name1 table_name2)提示来强制使用nested loop。
实则为 驱动表扇出*被驱动每次扫描行数*filtered*成本常数 ,即 20*200*10%*0.2 。
首先,MySql join连接可以连接两张或更多的数据表,但是并没有谁是“驱动表”之说。Join分为inner join内连接和outer join外连接两种形式,外连接还可以进一步分为左连接和右连接。
结果显示t2是驱动表,t1是被驱动表。t2是1000条数据按理说是大表应该是被驱动表,与 博文A , 博文B 的结论又不一致了。
首先,MySql join连接可以连接两张或更多的数据表,但是并没有谁是“驱动表”之说。Join分为inner join内连接和outer join外连接两种形式,外连接还可以进一步分为左连接和右连接。
因为表连接查询时后面的表必然会进行全表扫描,所以数据少的放后面,提高sql语句的执行效率。操作方法如下:首先优化原则,小表驱动大小,即小的数据集驱动大的数据集。
a inner join b,MySQL会选择相对小的表作为驱动表,大的表作为被驱动表。这里的大和小,你可以理解为真正参与关联查询的数据行多的为大表,少的为小表。
开启慢查询日志,设置阀值,比如超过5秒就是慢SQL,并把它抓取出来。explain+慢SQL 分析 show profile 查询SQL在MySQL服务器里面的执行细节和声明周期。
如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。数据库是最底层的,瓶颈往往是数据库。
MySQL选择驱动表与被驱动表是基于优化器优化后的,小表是驱动表,大表是被驱动表。 基于优化器优化后开篇的 博文A与B 结论成立。
首先,MySql join连接可以连接两张或更多的数据表,但是并没有谁是“驱动表”之说。Join分为inner join内连接和outer join外连接两种形式,外连接还可以进一步分为左连接和右连接。
一般情况下,遵循如下规则:a left join b,a是驱动表,b是被驱动表。a right join b,b是驱动表,a是被驱动表。a inner join b,MySQL会选择相对小的表作为驱动表,大的表作为被驱动表。
然后再从驱动表结果集中拿出另一条记录,再一次把被驱动表的记录加载到内存中一遍,周而复始,驱动表结果集中有多少条记录,就得把被驱动表从磁盘上加载到内存中多少次。
实则为 驱动表扇出*被驱动每次扫描行数*filtered*成本常数 ,即 20*200*10%*0.2 。