AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-5821

Sebastian's questions

Martin Hope
Sebastian
Asked: 2012-02-27 06:10:17 +0800 CST

MySQL:ORDER BY 没用?

  • 3
CREATE TEMPORARY TABLE tt;
INSERT INTO tt; many times
SELECT FROM tt ORDER BY id LIMIT ?,1000;

临时表是在脚本的开头创建的,它有一个“id”auto_increment 列(和其他列)。脚本的第 1 部分使用各种 SELECT 填充表。第 2 部分应该以 1000 块为单位处理所有选定的行,但永远不会再次写入该表。

我假设这两个命令是相同的

SELECT FROM tt ORDER BY id LIMIT ?,1000;
SELECT FROM tt LIMIT ?,1000;

但这是真的吗?mySQL 是否有可能在多个 SELECT 上以不同的顺序检索行,即使表没有写在两者之间?

对临时表进行排序是阅读时最长的部分,我很乐意摆脱 ORDER BY 部分,但我不想错过任何记录,因为顺序在 SELECT LIMIT 0,1000 和 SELECT LIMIT 1000 之间发生了变化, 1000。

mysql order-by
  • 3 个回答
  • 841 Views
Martin Hope
Sebastian
Asked: 2012-02-22 08:18:00 +0800 CST

将 WHERE 限制为 MAX() 和 COUNT()

  • 2

这是我当前的 mySQL 查询:

SELECT e.*, MAX(m.datetime) AS unread_last, COUNT(m.id) AS unread
  FROM TAB_EVENT e
  LEFT JOIN TAB_MESSAGE m ON e.id=m.event_id
  WHERE ( m.`read` IS NULL OR m.`read` = 0)
  GROUP BY e.id
  ORDER BY m.datetime DESC, e.id ASC
  LIMIT 10;

我得到:所有 TAB_EVENT 行根本没有 TAB_MESSAGE 消息或至少有一个未读消息(读取 = BOOLEAN DEFAULT 0)。

我需要:所有 TAB_EVENT 行,无论它们的消息是什么,以及最新未读的日期时间和每个 TAB_EVENT 的未读消息的计数。

可能有成千上万的 TAB_EVENT 行和更多的 TAB_MESSAGE 行,我想避免为每个事件运行一个子查询。

备选方案 1:使用上面的查询加上另一个带有 m 的 UNION。read= 1. 缺点:两个 JOINed 重查询加上另一个临时表。

备选方案 2:SELECT e.* unconditional 加上另一个 SELECT event_id, MAX(), COUNT() FROM TAB_MESSAGE GROUP BY event_id ORDER BY MAX() 并合并调用 Perl 脚本中的所有内容。缺点:失去服务器端 LIMIT 的能力。

更新/解决方案

这是我完成这项工作的最后一个查询:

SELECT e.*, m.unread_last, m.unread 
FROM
TAB_EVENT e LEFT JOIN
(
    SELECT event_id,MAX(`datetime`) AS unread_last, COUNT(*) AS unread FROM TAB_MESSAGE
    WHERE `read` = 0
    GROUP BY event_id
    ORDER BY `datetime` DESC
) m
ON e.id=m.event_id
ORDER BY m.datetime DESC, e.id ASC
LIMIT 10;

读取 IS NULL 条件捕获在原始查询中没有任何消息的事件,读取列是布尔值 NOT NULL。

此查询现在返回所有事件并添加最新的未读消息时间戳加上未读消息的数量。对于没有任何完全正常的消息的事件,两个消息列都为 NULL(对于日期时间将转换为 "",对于 Perl 端的计数将转换为 0)。

感谢 RolandoMySQLDBA,我的查询是基于他的回答。

mysql join
  • 2 个回答
  • 8847 Views
Martin Hope
Sebastian
Asked: 2012-01-14 00:26:12 +0800 CST

如何检测正在运行的mysqldump?

  • 3

以下是我无法更改的内容: 我们有一个运行主服务器和一些从服务器的 mySQL myISAM 复制。使用 mysqldump 正在使用一个从属服务器进行夜间备份。与主服务器相比,备份使用重锁迫使它的从服务器“老化”。mysqldump 以 root 身份连接所有数据库,而其他所有连接都在每个数据库使用一个非超级用户。转储使用专用备份服务器上的简单 shell 脚本启动。

这是问题所在:我想检测备份是否正在运行,同时作为“普通”用户连接到正在备份的服务器上运行的数据库之一。Cronjobs 应该能够通过提前退出或仅处理不能等到备份完成的非常重要的必需作业来对正在运行的备份做出反应。运行备份脚本的服务器与网络服务器没有连接,它们唯一的共同点是 mysql 服务器。备份脚本可以做一些事情来将服务器标记为“当前正在运行备份”。我更愿意设置某种“所有用户可见的全局服务器端环境变量”以仅忽略运行备份的一个从属设备,但也可以简单地知道备份正在该数据库或复制链上运行.

我试图在备份开始时创建一个临时表(现有 = 备份正在运行,不存在 = 没有备份运行),但临时表只显示最初创建它的连接(如预期的那样)。如果非超级用户可以获得查看包括其他用户和 root 在内的所有连接的 SHOW PROCESSLIST 的权限(来自备份服务器的任何连接 = 备份正在运行),我进行了搜索 - 但没有运气。向所有数据库用户提供 SUPER 是没有选择的。

有什么建议么?

感谢您阅读(和回答)。

mysql backup
  • 3 个回答
  • 11293 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve