【Mysql-Innodb引擎】SQL查询结果的一致性:不添加Order By时不同时间查询结果是否固定?-灵析社区

刘一抗二二

关于SQL查询的一个疑问。 现在有两站Mysql数据库表【cs_mc_member】【cs_mc_member_card】 其中 member表的一条数据 对应多条 member_card,对应关系为**一对多** 。 两表的数据均为**只增不删** 。 现有查询: SELECT DISTINCT m.mobile,m.id FROM cs_mc_member m JOIN cs_mc_member_card mc ON m.id = mc.memberId WHERE m.status='NORMAL' AND m.mobile IS NOT NULL LIMIT 0,500; 请问,上述SQL不添加Orderr By语句的情况下,不同时间查询得到的结果一定相同吗? 为什么不增加order by ? 使用DISTINCT后,order by 将不再执行索引,现有数据量查询一次 大约5s,性能不被接受。

阅读量:193

点赞量:0

问AI
希望查询结果一致,建议添加"ORDER BY",不然结果顺序是未知。 可以根据主键排序,性能损失小。 “使用DISTINCT后,order by 将不再执行索引” 这个问题,你可以先用order by 查询后,用子查询的方式,外层使用DISTINCT。 举例: SELECT DISTINCT t.a,t.b FROM ( SELECT a,b FROM table1 WHERE a = 'x' ORDER BY id ) t; 关于性能: 1. 根据索引查询,合理使用索引; 2. 要性能的场景,数据多:不要做关联表查询,优化表结构; 3. 要性能的场景,高并发:用好缓存,不要全压数据库;