问题
1、如下图,虽然图中的type,有个表没用到索引,但是这个表数据很小,才被检索了115条数据,而最多的那张表也只被检索了2108条数据,而且还用上索引了,但是这条sql执行了298s,如何优化
解决方案
1、给那个没用到索引的数据表加索引
原理
这里就涉及到连表查的时候会用到的算法,笛卡尔积
顾名思义, 这个概念得名于笛卡儿. 在数学中,两个集合 X 和 Y 的笛卡儿积(Cartesian product),又称直积,表示为 X × Y,是其第一个对象是 X 的成员和第二个对象是 Y 的一个成员的所有可能的有序对.
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。
也就是说,当我们连表的时候,数据库会把我们两张表 on 条件下的所有可能性都给列出来,所以上图中看似只是检索了2108和115,但是其实组合的可能性是 2108的115次方,然后从这些数据里再进行where 条件的检索,