+ -
当前位置:首页 → 问答吧 → mysql 条件与排序问题.

mysql 条件与排序问题.

时间:2011-06-28

来源:互联网

SELECT * FROM dba AS T LEFT JOIN dbb AS Y ON Y.id=T.id WHERE T.gid=9 AND Y.name='love'

  如果把Y.name='love' 放到ON 条件中, ON Y.id=T.id AND Y.name='love' 这样有什么区别? 性能差异明显不?

  SELECT * FROM dba WHERE order = '1000'

  这句sql默认排序是什么规律? 是按主键ASC还是什么?

作者: 冯.于安   发布时间: 2011-06-28

貌似这样改的话,逻辑性就发生改变了
LEFT JOIN 里的条件不成立的话,会返回字段全 NULL 的行
而将外联表的条件至于 WHERE 中,将不返回任何不符合条件的行
这样的话,感觉两者的性能就不具备可比性了。
感觉这么改的话,不如使用内联,理论上性能应该比外联更高
不过以前我测试过,内外联在大多数情况下,性能并没有特别显著差异

貌似不同的表引擎在不给定 ORDER BY 的时候,行为是不可测的
MyISAM不好说,因为很久不用了,据我自己的经验来看,InnoDB 默认会按照索引记录顺序返回
一般而言 InnoDB 默认是按主键的正序返回,但是印象中在删除中间行并再次插入的话,这样再查询所得到的结果顺序就会有一定混乱。不过我并没有就此做过专门研究,只是印象中以前遇到过此类排序故障,显式加了 ORDER BY 后解决,于是仅供参考。

阐述若有不周望指正。

作者: 路游宝宝   发布时间: 2011-06-28

ON 条件理解为 与所选信息符合的资源,
where 条件理解为, 所选信息的过滤条件.

发现where 即可条件a表, 也可条件b表.

路游宝宝  儿童节好.

作者: 冯.于安   发布时间: 2011-06-28

最近被误导了, 原以为在未用ORDER BY时, 默认是用主键来排序.可事实上不是, 规律很难理清.

比如有些主键是md5() 唯一值时, 我们就很清楚知道, 排序问题了.

作者: 冯.于安   发布时间: 2011-06-28