当前位置: 首页 > 知识库问答 >
问题:

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

何睿范
2024-07-03

关于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,性能不被接受。

共有1个答案

戚研
2024-07-03

希望查询结果一致,建议添加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. 要性能的场景,高并发:用好缓存,不要全压数据库;
 类似资料:
  • 在程序中有一部分代码,用于执行查询: 数据集 () 表应该有大约 20000 条记录(行计数),但在程序内部,它在调试模式下说只有 20 条记录。 我在同一个数据库表上单独运行了脚本,该表在 SQL Server 连接字符串中使用,但在 SQL Server Management Studio 中,它按预期返回了 20000 条记录。 该脚本看起来像: 它是相同的脚本文本,代码也会执行该文本。 有

  • 问题内容: 有没有一种方法可以获取MySQL查询的时间(特别是使用PHP)?即,完成查询所花费的实际时间。 如:结果1-10表示棕色。 (0.11秒) 我试图寻找一个例子,无济于事。这是我的代码示例: 对于当前的全文搜索,请使用MyISAM表引擎。任何帮助都将是不可思议的。谢谢。 问题答案: 注意 ,由于参数为true ,这将使您以 秒 (而不是微秒)为单位的运行时间最接近的微秒。看到这个

  • 问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作

  • 主要内容:单字段排序,多字段排序通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。 在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格进行排序;在医院的挂号系统中,可以按照挂号的先后顺序进行排序等。 ORDER BY 关键字主要用来将查询结果中

  • 我正在对一个小表执行一个简单的查询 系统表只有三列(Id、Name、Progress)和1300行。 我获取数据的代码是: 这段代码在JTable中显示日期大约需要15秒,而如果在phpmyadmin中执行查询,则需要不到1秒。

  • 当我在MySQL Workbench中查询一个表时,没有显示任何结果,结果部分只是空白,没有网格或任何东西。然而,如果我导出数据,它就在那里。直到几天前,一切都很顺利。 查询设置: 最大长度=65536 没有查询工作,一个例子将是