一.业务逻辑是放在join层还是code层
1.对于sql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。
2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。
3.数据库是最底层的,瓶颈往往是数据库。建议数据库只是作为数据store的工具,而不要添加业务上去。
二.如果要用Join 查询
1.如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。
所谓小表驱动大表,就是将数据少放在遍历前面,inner join 会自动匹配小表作为驱动表,left join 左边作为驱动表,right join 右边作为驱动表
综上:
小表驱动大表的主要目的是通过减少表连接创建的次数,加快查询速度
2.查询本身效率也可能会有所提升。查询id集的时候,使用IN()代替关联查询,可以让MySQL按照ID顺序进行查询,这可能比随机的关联要更高效。
大部分情况下 join查询会比in查询要快