0 0

msql 同一语句查询结果顺序不一致0

比较复杂的查询,执行多次, 结果顺序不一致.
语句如下:

SELECT DISTINCT a.id AS id, c.id as cid, c.p
                a.guid AS guid,
                a.channelId,
                a.contentType,
                a.catchup,
                a.ovpContentId AS ovpContentId,
                a.rating AS rating,
                a.state AS state,
                a.releaseYear AS releaseYear,
                a.publishDate AS publishDate,
                a.expiryDate AS expiryDate,
                a.startTime AS startTime,
                a.endTime AS endTime,
                a.restriction AS restriction,
                a.hitCount AS hitCount,
                a.operator AS operator,
                c.sequence AS sequence,
                a.createTime AS createTime,
                a.updateTime AS updateTime,
                a.status AS status,
                a.contentType AS contentType,
                a.channelId AS channelId,
                a.catchup AS catchup,
                a.episode AS episode,
                a.episodeGroup AS episodeGroup,
                (SELECT ifnull(count(*), 0)
                   FROM product_content pc
                  WHERE pc.productId = -1 AND pc.contentId = a.id)
                   AS signAnonymous
  FROM content a, content_properties b, category_content c
 WHERE     a.id = b.contentId
       AND b.lang = 'en-gb'
       AND a.contentType = 'vod'
       AND a.state = 'completed'
       AND (a.episode IS NULL OR a.episode = 0)
       AND a.status = 0
       AND a.publishDate <= now()
       AND a.expiryDate >= now()
       AND a.id IN
              (SELECT DISTINCT pc.contentId
                 FROM product_content pc, product p
                WHERE     pc.productId = p.id
                      AND p.state = 'reviewed'
                      AND p.status = 0
                      AND p.publishDate <= now()
                      AND p.expiryDate >= now()
                      AND pc.status = 0)
       AND a.id = c.contentId
       AND c.categoryId = 9
ORDER BY c.sequence IS NOT NULL, c.sequence DESC, c.pinTime DESC
 LIMIT 1, 10


排序情况:

ORDER BY c.sequence IS NOT NULL, c.sequence DESC, c.pinTime DESC

 

个人理解: 先sequence 不为空排序, 然后以sequence 倒序排序, 再以pinTime排序.

查询记录中,sequence 大小相等, pinTime 都是null.

所以其实order by sequence无效. 不知为什么查询结果不一致?

通过explaion, 结果如下:



 

注: 本查询是,通过java程序调用, 从控制台,打印出Id发现顺序不一致.  通过mysql客户端 直接执行sql 未发现结果不一致.

 

问题: 在mysql中, 同一sql,是否会出现查询结果顺序不一致情况?

耗费将近一下午,在google 上,未找到此方面的知识,不知各位前辈是否遇到过次种问题.

 

2013年10月08日 18:12
  • 大小: 17.4 KB

2个答案 按时间排序 按投票排序

0 0

debug 一下你的 java 代码,看看哪里的问题!

2013年10月09日 10:24
0 0

既然客户端没问题,能发下java代码吗

2013年10月08日 18:27

相关推荐

    基于SQL查询语句的查询优化方法.pdf

    通过合理设计嵌套查询,可以对查询结果进行进一步的筛选,提高查询的精确度。 此外,查询优化还涉及对SQL查询语句进行重写,以利用数据库系统的优化器。有时,同一逻辑的查询可以通过不同的SQL语句来实现,但不同的...

    递归查询菜单树,支持mysql,oracle

    这些技术通常提供API接口,将数据库查询结果转化为JSON格式,供前端渲染。 总的来说,递归查询菜单树是数据库操作的一个常见应用场景,它涉及到数据库设计、SQL查询技巧以及前后端的数据交换。理解并掌握这些知识点...

    MYSQL WHERE语句优化

    6. **无效常数表达式的早期检测**:MySQL能快速识别并忽略不可能返回结果的SELECT语句,节省资源。 7. **WHERE与HAVING的合并**:如果不使用GROUP BY或分组函数,HAVING子句的行为与WHERE子句相同,可以合并使用。 ...

    mysql,查询,索引

    2. **=和IN可以乱序**:如果查询条件中有`=`和`IN`操作符,则可以改变它们的顺序而不影响索引的使用。 3. **尽量选择区分度高的列作为索引**:索引列应当尽可能唯一,以提高查询效率。 4. **索引列不能参与计算**:...

    mysql 索引与执行计划

    主要包括SIMPLE(简单的SELECT查询)、PRIMARY(包含子查询的外部查询)、SUBQUERY(子查询)、DEPENDENT SUBQUERY(依赖外部查询结果的子查询)等。 通过以上详细介绍,我们可以看出索引和执行计划对于提高MySQL...

    31-视频32MySQL高级查询

    窗口函数(Window Functions)是MySQL的一个高级特性,它们允许我们在一个结果集的“窗口”上执行计算,而不只是当前行。例如,LEAD()和LAG()函数可以用来访问相邻行的值,RANK()和ROW_NUMBER()可以为每行分配唯一的...

    阿里大牛何sir 深入MySQL加锁处理分析

    这意味着,数据记录的物理顺序和主键逻辑顺序是一致的,因此基于主键的查询非常快速高效。聚簇索引的结构要求每个表只能有一个聚簇索引。 2PL(Two-Phase Locking,二阶段锁)是一种事务控制机制。在InnoDB存储引擎...

    MySQL数据库面试宝典1.pdf

    - **解决方法**:设置超时机制、优化SQL语句顺序、使用死锁检测工具。 **6.4.1 常见的解决死锁的方法** - 设置事务的隔离级别。 - 调整SQL语句执行顺序。 **6.4.2 数据库的乐观锁和悲观锁是什么?怎么实现的?** -...

    mysql游标实现到了最后一个结束之后结束循环

    MySQL游标是数据库管理系统中用于遍历查询结果集的一种机制,尤其在处理大量数据或进行迭代操作时,游标显得尤为重要。这篇博文可能是探讨如何在MySQL中使用游标,特别是当游标执行到最后一行后如何正确地结束循环。...

    MySQL事务隔离级别

    不可重复读是指在同一事务中,两次执行相同的查询可能会得到不同的结果,因为其他事务在这期间插入或更新了数据。幻读是指在查询期间,事务可以读到其他事务插入的新行,即使这些行满足相同的搜索条件。 3. **可...

    史上最全MySQL⾯试题及答案

    常见的优化方法包括避免select *,使用连接来代替子查询,拆分大的delete或insert语句,使用limit对查询结果的记录进行限定,使用exists代替in,使用where子句替换having子句,等等。 11. 表结构优化 表结构优化是...

    mysqlexplain.ppt

    - **EXTENDED形式**:`EXPLAIN EXTENDED SELECT ...`,此形式会显示出经过MySQL优化器优化后的查询语句,可以通过`SHOW WARNINGS`查看。 - **PARTITIONS形式**:`EXPLAIN PARTITIONS SELECT ...`,适用于分区表,...

    mysql查询优化的若干

    MySQL能够快速识别并处理某些不可能返回结果的SELECT语句,从而避免了不必要的资源消耗。 #### 4. WHERE与HAVING子句的优化 - **HAVING与WHERE的合并**:如果不使用GROUP BY或分组函数(如COUNT()),HAVING子句...

    php操作mysql数据库1

    总结,`mysql_fetch_array()`和`mysql_fetch_row()`是PHP中处理MySQL查询结果的重要工具,帮助开发者从数据库中提取和显示数据。虽然`mysql_`系列函数已经过时,但理解其工作原理对于初学者仍然非常有益。在实际开发...

    mysql 面试题 其中有答案

    * 最左匹配原则:在创建复合索引时,需要关注查询 SQL 条件的顺序,确保最左匹配原则有效,同时可以删除不必要的冗余索引。 五、锁机制 * 锁机制:为了保证访问的次序,防止数据的不一致。 * 锁机制可以防止多个...

    MySQL配置文件解析

    15. `query_cache_size`和`query_cache_limit`:定义了查询缓存的大小和单个查询结果的最大值,提高重复查询的响应速度。 16. `ft_min_word_len`:全文检索时最小的索引词长度。 17. `default-storage-engine`:...

    mysql-常见问题,索引优化

    不可重复读则是在同一事务内多次读取同一数据,结果不同。 13. `tmp_table_size`优化 临时表大小设置不当可能导致内存溢出,影响性能。根据系统资源和查询需求,适当调整`tmp_table_size`和`max_heap_table_size`...

    mysql数据库my.cnf配置文件

    #MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中, # 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户...

    MySQL面试题及答案.docx

    幻读是指在一个事务的两次查询中数据笔数不一致, 例如有一个事务查询了几列(Row)数据, 而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中, 就会发现有几列数据是它先前所没有的。 8. 视图的...

Global site tag (gtag.js) - Google Analytics