联表查询尽量用join on
而不是 where table one= table two
原因 数据库查询语句执行顺序为
- from
- on
- join
- where
- group by(开始使用select中的别名,后面的语句中都可以使用)
- avg,sum....
- having
- select
- distinct
- order by
- limit
首先 from会生成一个基于多个表的笛卡尔积临时表,使用on会在对虚拟表进行一次筛选,生成一个新临时表,然后where对筛选后的新临时表进行筛选。
如果不使用on进行筛选,会依据where语句对整个笛卡尔积表进行筛选,在数据量很大时计算量极大。
尽量不使用select * 进行查询
为什么不建议你使用SELECT *? - 掘金 (juejin.cn)
group by 查询失败
mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column...解决方案
MySQL5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。
使用默认配置时,使用group by语句,select 、having 、order by 时只能使用 group by中使用的列,聚合函数。 当group by 列包括主键时 可以使用任意列。