数据量大innerjoin太慢(inner join数据增多了)
如何减少oracle使用inner join时所使用的时间?
首先要做join的同时排除做其他比较话时间的操作,比如聚合,排序和一些不会走索引的查询,比如, not like ,not in 等等低效的查询
其次要清楚inner join的join方式,一般数据库会根据执行计划自动挑选系统认为最优的join方式。但是我们也可以通过加hints的方式强制选择join类型。
一般有下面几种常用方式
1 nested loop
从A表抽一条记录,遍历B表查找匹配记录,然后从a表抽下一条,遍历B表。
这种情况需要A表相对很小的情况会很高效
2 hash join
将A表按连接键计算出一个hash表,然后从B表一条条抽取记录,计算hash值,根据hash到A表的hash来匹配符合条件的记录,这是最多用的也是泛用性最高的一种join方式
3 sort merge join
将A,B表都排好序,然后做merge,符合条件的选出
应对与A,B表本身已经排完序的情况比较高效

MYSQL三表个联合查询,10w数据速度嗷慢。10元RMB求助人帮解决。qq23559055
MySQL查询只使用一个索引,如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。
很明显 你这个在联合条件查询的时候已经使用过索引。
以上也只是个人推测,因为mysql 各个版本都很有特点,不能一概而论,理论上主键使用聚集索引更优秀一些。
而且排序本身就消耗性能。
数据量大表inner join,有办法优化吗
改变一下inner join顺序试试呢?另外现在有哪些索引? tim_spac说的没错,并没有使用表goods_color和goods_size中的其它字段,size_id和color_id在表goods_sku中都有,可以不用join这两个表,除非为了数据一致性或取得相关的其它字段。
数据库中inner join有时候会比left join慢,可能的原因
如果单纯看逻辑运算数量的话,left join的逻辑运算数量会比inner join多,因为inner join只返回左右表的交集,而left join会返回左表中全部记录,若右表无对应记录,则置为null。
Inner join在连接的时候会选取较小的表作为主表进行循环,减少循环的次数。Left join默认使用左表作为主表进行循环。
可能的原因是连接字段没有在大表上建索引,但是在小表上建了索引,而此时left join的左表是大表,在循环查找过程中走小表的索引,而此时inner join中小表为左表,在按连接字段值相等的情况下去查右表的情况下,不走右表的索引,所以导致inner join比left join慢。
sql 优化 left join 由于数据量过大查询很慢
创建存储过程,将第一次left join关联查询出来的数据存储到临时表,再次进行关联查询试试。
若依然很慢,之后可以对作出的两次单纯的表关联查询进行检查,检查单条SQL语句的查询速度,找到慢的问题,再去优化。