首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL - ORDER BY子句导致SQL_CALC_FOUND_ROWS select不返回数据

在MySQL中,ORDER BY子句用于对查询结果进行排序。而SQL_CALC_FOUND_ROWS是一个MySQL特有的选项,它用于计算查询结果集的总行数,而不考虑LIMIT限制。

然而,有时候在使用ORDER BY子句和SQL_CALC_FOUND_ROWS一起查询时,可能会出现SELECT语句不返回数据的情况。这通常是由于以下原因引起的:

  1. 查询结果为空:首先要检查的是ORDER BY子句是否正确,是否按照正确的列进行排序。如果排序的列不存在或者没有匹配的数据,那么查询结果将为空。
  2. 内存不足:如果待排序的数据集较大,而服务器的内存不足以容纳整个数据集,MySQL可能会选择不返回结果而是中断查询。可以尝试增加服务器的内存或者优化查询以减少内存使用。
  3. SQL_CALC_FOUND_ROWS与LIMIT同时使用:当ORDER BY子句与SQL_CALC_FOUND_ROWS和LIMIT一起使用时,MySQL可能会出现问题。这是因为SQL_CALC_FOUND_ROWS计算的是未经LIMIT限制的结果集的总行数,而LIMIT则会对结果集进行截取。这可能导致计算的总行数与实际返回的行数不匹配。可以尝试分开使用SQL_CALC_FOUND_ROWS和LIMIT,或者使用其他方式获取总行数。

对于解决以上问题,可以采取以下措施:

  1. 确保ORDER BY子句正确且排序列存在,并检查是否有匹配的数据。
  2. 增加服务器的内存或者优化查询,以减少内存使用。
  3. 避免同时使用ORDER BY、SQL_CALC_FOUND_ROWS和LIMIT,或者分开使用它们。

腾讯云提供了丰富的数据库服务和产品,其中包括云数据库MySQL。云数据库MySQL是一种高度可扩展、高性能、可靠的关系型数据库服务,它提供了自动备份、容灾、监控、性能优化等功能,适用于各种规模的应用场景。更多关于腾讯云数据库MySQL的信息可以参考以下链接:

腾讯云数据库MySQL产品介绍:https://cloud.tencent.com/product/cdb

腾讯云数据库MySQL文档:https://cloud.tencent.com/document/product/236

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL使用ORDER BY子句数据排序

如果我们需要对读取的数据进行排序,我们就可以使用 MySQLORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。...语法 以下是 SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据SELECT field1, field2,...fieldN FROM table_name1, table_name2...---- 在命令提示符中使用 ORDER BY 子句 以下将在 SQL SELECT 语句中使用 ORDER BY 子句来读取MySQL 数据表 runoob_tbl 中的数据: 实例 尝试以下实例,结果将按升序及降序排列...---- 在 PHP 脚本中使用 ORDER BY 子句 你可以使用PHP函数的 mysqli_query() 及相同的 SQL SELECT 带上 ORDER BY 子句的命令来获取数据。...实例 尝试以下实例,查询后的数据按 submission_date 字段的降序排列后返回MySQL ORDER BY 测试: <?

1.4K00

mysqlSQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高

mysqlSQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高 在很多分页的程序中都这样写: SELECT COUNT(*) from `table` WHERE .........; 查出符合条件的记录总数 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成: SELECT SQL_CALC_FOUND_ROWS...limit M, N; SELECT FOUND_ROWS(); 这样只要执行一次较耗时的复杂查询可以同时得到与不带limit同样的记录条数 第二个 SELECT返回一个数字,指示了在没有LIMIT子句的情况下...,第一个SELECT返回了多少行 (若上述的 SELECT语句不包括 SQL_CALC_FOUND_ROWS 选项,则使用LIMIT 和不使用时,FOUND_ROWS() 可能会返回不同的结果)。...例如外键)的表 适用。

1.9K10
  • MySQL优化特定类型的查询(书摘备查)

    除非定义了order by,否则mysql会自动对group by里面的列进行排序。因此,如果显示包括一个含有相同列的order by子句,则对mysql的实际执行性能没有什么影响。...优化order by 在某些情况中,mysql可以使用一个索引来满足order by子句,而不需要额外的排序。...如果确实需要优化分页系统,也许应该利用预先计算好的汇总数据。作为替代方案,可以联接只含有order by子句需要的主键和列的冗余表,也可以考虑使用全文检索。 7....优化sql_calc_found_rows 对于分页显示,另外一种常用的技巧是对含有limit的查询添加语句sql_calc_found_rows,这样就可以知道没有limit的时候会返回多少行数据。...但是要知道all不会删除临时表,mysql总是把结果放在临时表中,然后再把它们取出来,即使没有必要这么做(比如可以把数据直接返回给客户端)时也会如此。

    1.4K30

    MySQL分页查询列表同时返回总数的三种方案及性能对比

    背景         我们在使用Mybatis分页查询数据列表时,在用户的一个请求中常常需要同时返回当前页的列表数据以及满足条件的数据总条数。以下介绍了三种常见方案。具体使用哪种,具体场景具体分析。...="BaseResultMap, recordCounts"> select SQL_CALC_FOUND_ROWS <include refid="Base_Column_List...*) FROM count_test WHERE b = 666;         作者通过比较这两种情形下查询的耗时差异得出了结论:在WHERE/<em>ORDER</em> <em>子句</em>中有合适索引的情况下,执行两次查询的效率比执行一次查询的效率高...第1篇博客的关键点是它们<em>select</em>的都是*,而*在第一篇博客中代表a, b, c, d四个字段,且d字段不属于任何索引。这是<em>导致</em>两种查询耗时差异巨大的根本原因。...在全表扫描(<em>数据</em>表无索引或索引<em>不</em>包含查询字段)时,执行一次查询的性能远高(取决于<em>数据</em>量)于执行两次查询。

    6.5K30

    MySQL DQL 数据查询

    1.SELECT 语句 MySQLSELECT 语句用于从数据库表中检索数据。功能强大,语句结构复杂多样。不过基本的语句格式像下面这个样子。...但是,如果 SELECT 指定的数据列,没有用于聚合函数也不在 GROUP BY 子句中,按理说会报错,但是 MySQL 会选择第一条显示在结果集中。...SELECT * FROM inner_raw_add_friend_20170514 ORDER BY uin DESC; 8.LIMIT 子句 LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数...InnoDB 数据建议使用,当数据表行数过大时,因需要扫描全表,查询较慢。...在 MySQL 中,警告(Warning)是一种表示潜在问题或异常情况的消息,它不会导致语句的执行失败,但可能会影响到查询结果或性能。

    24320

    MySQL 使用 order by limit 分页排序会导致数据丢失和重复!

    问题 最近在项目中遇到一个很神奇的问题,MySQL 使用 order by 进行排序并进行分页的时候,会出现部分数据丢失和重复。具体看下面这三张图 ? 图一 ? 图二 ?...导致最终使用了堆排序。 如果了解算法的你,应该知道堆排序是不稳定的。这种不稳定性,指的就是多次排序后,各个数的相对位置发生了变化。 但是,不是所有的 MySQL 版本都是这样。...从 MySQL 5.6 版本开始,优化器在使用 order by limit 时,做了上面的优化,导致排序字段没有使用索引时,使用堆排序。 问题解决 通过上面的分析,有两种解决方案可以解决此问题。...方案一:降低 MySQL 版本为 5.5 或更低版本。此方案推荐,数据库版本一般是指定的,降低数据库版本工作量较大。 方案二:在 order by 排序字段里,添加有索引的字段,比如主键ID。...总结 如果查询数据进行排序和分页时,如果排序字段没有使用索引,一定要添加一个有索引的字段,比如主键 ID,保证顺序稳定。否则,查询的数据导致数据丢失和重复。

    5.9K30

    MySQL-Select语句高级应用

    1.1 SELECT高级应用 1.1.1 前期准备工作 本次测试使用的是world数据库,由mysql官方提供下载地址: https://dev.mysql.com/doc/index-other.html...中ORDER BY子句 1.3.1 order by 子句的作用   ORDER BY子句用来排序行   如果SELECT语句中没有ORDER BY子句,那么结果集中行的顺序是不可预料的 语法: SELECT...默认值 DEsc 执行降序排序 使用方法 ORDER BY子句一般在SELECT语句的最后面 1.3.2 order by 示例 【示例一】Order by基本使用 SELECT * FROM city...如果没有order by子句返回的4行就是不可预料的。...子查询包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,并且如果指定了它就必须放在主 SELECT 语句的最后。

    3.9K00

    Mysql同时计算符合条件的记录总数,并且查询出数据结果集,不考虑LIMIT子句限制

    我们正常情况在进行数据分页时一般会通过count查询总条数,limit查询当前页数据,完成数据数据分页。今天学习的是如何一次性查询完成,这是从wordpress中学习到的。...AND ( wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private' ))) GROUP BYwp_posts.ID ORDER...BYwp_posts.post_date DESC LIMIT 0,10;SELECT FOUND_ROWS();分页输出数据:678458678457678456678455678454678453678452678451678450678449...GROUP BY子句将结果按照wp_posts.ID进行分组,ORDER BY子句按照wp_posts.post_date降序排序。LIMIT子句指定了返回结果的偏移量0和数量10。...注意,通过使用SQL_CALC_FOUND_ROWS,该查询语句会同时计算出满足条件的记录总数,可以通过执行SELECT FOUND_ROWS()获取这个总记录数。

    47830

    如何SELECT进行单表查询,怎样使用WHERE结合各种运算符对数据进行过滤,如何使用ORDER BY 子句 查询

    每当返回一行时,字符串被输出一次。...过滤和排序数据 过滤: 对于查询到的数据使用某些自定义条件进行筛选 WHERE子句 SELECT 列名1, 列名2 , ...FROM 表名WHERE 过滤条件;...补充:赋值使用 := 符号 在使用WHERE子句过滤数据的时候可以使用比较运算符 查询薪水小于3000的员工的名字和薪水 SELECT last_name, salary FROM employees...= 'SA_REP'; ORDER BY 子句 对虚表的记录进行排序, 所以通常是在虚表的记录确定下来以后....使用 ORDER BY 子句排序 ASC(ascend): 升序(默认方式) DESC(descend): 降序ORDER BY 子句SELECT语句的结尾。

    3.6K31

    高性能MySQL学习笔记

    插入速度严重依赖于插入顺序 更新聚簇索引列的代价很高 居于聚簇索引的表在插入新航,或者主键呗更新导致需要移动行的时候,可能面临”页分裂”的问题 可能导致全表扫描变慢,尤其行比较稀疏,或者由于页分裂导致数据存储连续...“index”,则说明使用了索引扫描来做排序 MySQL可以使用同一个索引既满足排序又用于查找行,所以,如果可能,设计索引时应该尽可能的满足这两种任务 只有当索引列顺序和ORDER BY子句的顺序完全一致...如果需要关联多表,则当只有ORDER BY子句引用的字段全部为第一个表时,才能使用。...总是取出全部列 重复查询相同的数据 MySQL是否扫描额外的记录 在确定查询只返回需要的数据后,接下来应该看看为了返回结果是否扫描了过多的数据 对于MySQL,简单的衡量查询开销的指标如下: 响应时间...where条件来过滤匹配的记录 使用索引覆盖扫描来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。

    1.4K20

    高性能MySQL(4)——查询性能优化

    一般MySQL能够使用如下三种应用WHERE条件,从好到坏依次为: 在索引中使用WHERE条件来过滤匹配的记录。这是在存储引擎层完成的。...* FROM tag WHERE tag='mysql'; mysql> SELECT * FROM tag_post WHERE tag_id=1234; mysql> SELECT * FROM...如果没有通过ORDER BY子句显式地指定排序列,当查询使用GROUP BY 子句的时候,结果集会自动按照分组的列进行排序。...如果不关心结果集的顺序,而这中默认排序又导致了需要文件排序,则可以使用 ​ ORDER BY NULL,让MySQL文件不再进行排序。...经常需要手工地将WHERE,LIMIT,ORDER BY等子句"下推"到UNION的各个子查询中,以 ​ 便优化器可以充分利用这些条件进行优化。 ​ 2).

    1.4K10

    数据操纵:SELECT, INSERT, UPDATE, DELETE

    举例来说,一个 HAVING 子句必须出现在 GROUP BY 子句后,在 ORDER BY 字句之前。 24 25 一个 SELECT 表达式可以使用 AS 指定一个别名。...81 82 SQL_CALC_FOUND_ROWS (版本 4.0.0 和更新的) 告诉 MySQL 计算在不考虑 LIMIT 子句时结果集中将有多少行记录。...请注意,在早于 4.1.0 的版本中,LIMIT 0 是工作的,它将被优化为立即返回(结果集的记录数为 0)。查看章节 5.2.8 MySQL 如何优化 LIMIT。...OPEN 接受一个表的快照,并且 锁定表。这就意味着在一个 HANDLER ... OPEN 被执行后,表数据仍会被 (这个或其它的线程) 修改,这些修改可能在 HANDLER ......488 返回删除了的记录行数目。 489 只要表定义文件 `table_name.frm' 是有效的,即使数据或索引文件已经被损坏,也可以通过这种方式重建表。

    2.3K20

    优化MySQL中的分页

    一道面试的问题,当MySQL表中有数据量很大的时候如何做分页。。。。当时只知道在数据量很大的时候可以分表,但不知道不分表时可以怎么做。。。。...大的分页偏移量会增加使用的数据MySQL会将大量最终不会使用的数据加载到内存中。就 算我们假设大部分网站的用户只访问前几页数据,但少量的大的分页偏移量的请求也会对整个系统造成危害。...一个不正确的优化是采用SQL_CALC_FOUND_ROWS,SQL_CALC_FOUND_ROWS可以在能够在分页查询时事先准备好符合条件的记录数,随后只要执行一句select FOUND_ROWS(...SELECT SQL_CALC_FOUND_ROWS * FROM city ORDER BY id DESC LIMIT 100000, 15; 这个语句耗时20.02sec,是上一个的两倍。...我们可以将行数缓存起来,然后可以通过一个守护进程定期更新或者用户的某些操作导致缓存失效时,执行下面的语句: SELECT COUNT(*) FROM city USE INDEX(PRIMARY); 获取记录

    2.6K30

    MySQL分页性能优化指南

    一道面试的问题,当MySQL表中有数据量很大的时候如何做分页。。。。当时只知道在数据量很大的时候可以分表,但不知道不分表时可以怎么做。。。。...大的分页偏移量会增加使用的数据MySQL会将大量最终不会使用的数据加载到内存中。就算我们假设大部分网站的用户只访问前几页数据,但少量的大的分页偏移量的请求也会对整个系统造成危害。...一个不正确的优化是采用SQL_CALC_FOUND_ROWS,SQL_CALC_FOUND_ROWS可以在能够在分页查询时事先准备好符合条件的记录数,随后只要执行一句select FOUND_ROWS(...SELECT SQL_CALC_FOUND_ROWS * FROM city ORDER BY id DESC LIMIT 100000, 15; 这个语句耗时20.02sec,是上一个的两倍。...我们可以将行数缓存起来,然后可以通过一个守护进程定期更新或者用户的某些操作导致缓存失效时,执行下面的语句: SELECT COUNT(*) FROM city USE INDEX(PRIMARY); 获取记录

    1.2K80

    MySQL分页性能优化指南

    一道面试的问题,当MySQL表中有数据量很大的时候如何做分页。。。。当时只知道在数据量很大的时候可以分表,但不知道不分表时可以怎么做。。。。...大的分页偏移量会增加使用的数据MySQL会将大量最终不会使用的数据加载到内存中。就算我们假设大部分网站的用户只访问前几页数据,但少量的大的分页偏移量的请求也会对整个系统造成危害。...一个不正确的优化是采用SQL_CALC_FOUND_ROWS,SQL_CALC_FOUND_ROWS可以在能够在分页查询时事先准备好符合条件的记录数,随后只要执行一句select FOUND_ROWS(...SELECT SQL_CALC_FOUND_ROWS * FROM city ORDER BY id DESC LIMIT 100000, 15; 这个语句耗时20.02sec,是上一个的两倍。...我们可以将行数缓存起来,然后可以通过一个守护进程定期更新或者用户的某些操作导致缓存失效时,执行下面的语句: SELECT COUNT(*) FROM city USE INDEX(PRIMARY); 获取记录

    97930

    Mysql查询语句使用select.. for update导致数据库死锁分析

    解决同时拿数据的方法有很多,为了更加简单,增加其他表和服务的情况下,我们考虑采用select... for update的方式,这样X锁锁住查询的数据段,表里其他数据没有锁,其他业务逻辑还是可以操作。...下面说下mysql for update导致的死锁。...最后经过分析,我们项目里发现是for update的sql语句,和另外一个update非select数据的sql语句导致的死锁。...比如有60条数据select .. for update查询第31-60条数据,update在更新1-10条数据,按照innodb存储引擎的行锁原理,应该不会导致不同行的锁导致的互相等待。...* from table1 where getTime < 1 and IsSuccess=0 order by id asc limit 0,30 for update; 第1个sql先commit

    3.7K10

    MySQL分页性能优化指南

    一道面试的问题,当MySQL表中有数据量很大的时候如何做分页。。。。当时只知道在数据量很大的时候可以分表,但不知道不分表时可以怎么做。。。。...大的分页偏移量会增加使用的数据MySQL会将大量最终不会使用的数据加载到内存中。就算我们假设大部分网站的用户只访问前几页数据,但少量的大的分页偏移量的请求也会对整个系统造成危害。...一个不正确的优化是采用SQL_CALC_FOUND_ROWS,SQL_CALC_FOUND_ROWS可以在能够在分页查询时事先准备好符合条件的记录数,随后只要执行一句select FOUND_ROWS(...SELECT SQL_CALC_FOUND_ROWS * FROM city ORDER BY id DESC LIMIT 100000, 15; 这个语句耗时20.02sec,是上一个的两倍。...我们可以将行数缓存起来,然后可以通过一个守护进程定期更新或者用户的某些操作导致缓存失效时,执行下面的语句: SELECT COUNT(*) FROM city USE INDEX(PRIMARY); 获取记录

    77130

    SQL语句逻辑执行过程和相关语法详解

    本文也在多处通过这两个模型来分析为什么标准SQL不允许某些语法,以及为什么MySQL可以支持这些"标准"的语法。 1.2 各数据库系统的语句逻辑处理顺序 以SELECT语句为例。...mariadb和mysql在这一点上实际上是"规范"的,因为它违背了数据库的设计范式。详细内容在后文分析。...由于数据无序,导致检索数据时都是按照存储时的物理顺序进行访问,如此检索得到的数据���都是随机而不保证任何顺序的,除非指定了ORDER BY子句。...在SQL中没有使用ORDER BY时,有不少子句返回结果(虚拟表)都是随机的,因为实在没办法去保证顺序,但却又要求返回数据。...虽然在select_list中出现两个同名的列名称是允许的,但是在引用列别名的时候,无论是group by还是order by子句或其他子句,都认为同列名会导致二义性。

    3.6K20
    领券