select a,b from 表 group by a 这时候b的值如何确定的?1、不是标准r的SQL语句; 2、随机选择B还有 select a from 表 group by a; 和 select distinct(a) from 表; 哪个效率高?如果数据量比较大,建议用distinct,速度快一些
mysql在优化group by 和 distinct时,用的是同样的方法:临时表法和文件排序分组法。 优化的办法都是在目标列上加索引。在select * from a where id not in(select distinct(id) from b);这样的查询中,distinct会使用“早期终结”优化,只要发现一个符合要求的值后,立刻返回,查询下一个值。
GROUP BY 和 DISINTCT 效率一样。 可以测试一下,差别应该不会超过 3%
两个问题我都试过,第一个测试结果B总是id(主键)最小的那个 但是不知道是否永远都是这个结果 MYSQL自己根据记录处理顺序请问狼头哥 这个顺序有规则吗? 第二个测试 我以前对几百万的数据试过 group by 和distinct 速度差不多,但是哪个更快一点 我忘记了...
是,只要你的查询语句不变,结果基本保持不变,也就是第一个记录的B值。这个规律,如果是在单表中,则比较容易。 select * from table1 的时候,哪个在前,哪个就是第一条记录。 但如果有索引的情况下,则要考虑索引对顺序的影响。 MYSQL有可以走索引,这样顺序会有变化。如果多表JOIN查询,则会更复杂。
有字段 A B select a,b from 表 group by a 这时候b的值如何确定的? 随便一个还有 select a from 表 group by a; 和 select distinct(a) from 表; 哪个效率高? 一样低
2、随机选择B还有 select a from 表 group by a;
和 select distinct(a) from 表;
哪个效率高?如果数据量比较大,建议用distinct,速度快一些
用group by的效率要高。
优化的办法都是在目标列上加索引。在select * from a where id not in(select distinct(id) from b);这样的查询中,distinct会使用“早期终结”优化,只要发现一个符合要求的值后,立刻返回,查询下一个值。
可以测试一下,差别应该不会超过 3%
两个问题我都试过,第一个测试结果B总是id(主键)最小的那个 但是不知道是否永远都是这个结果
MYSQL自己根据记录处理顺序请问狼头哥 这个顺序有规则吗?
第二个测试 我以前对几百万的数据试过 group by 和distinct 速度差不多,但是哪个更快一点 我忘记了...
随便一个还有 select a from 表 group by a;
和 select distinct(a) from 表;
哪个效率高?
一样低