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-35719

ivan's questions

Martin Hope
ivan
Asked: 2022-10-25 19:06:02 +0800 CST

禁止循环(例如每周)计划中的重叠间隔

  • 6

我正在设计一个 postgres 表来记录每周计划中包含的间隔。它会保存多个企业的时间表,一个简单的示例数据集可能如下所示:

business_id  interval
-----------  -----------------------------------
1            Sunday   10:00:00 – Sunday 14:00:00
1            Sunday   22:00:00 – Monday 02:00:00
1            Friday   11:00:00 – Friday 16:00:00
1            Saturday 15:00:00 – Sunday 01:00:00

请注意,间隔可以跨越日期之间的界限。

一个企业不应该有重叠的时间间隔,我想以一种可以让我强制执行的方式设计表格。

我正在考虑将这些星期几 + 一天中的时间值映射到自一周开始以来的相应秒数,将间隔存储为int4range并使用排除约束来禁止重叠的整数范围,但这并不合适地址间隔围绕周末结束。

有没有一种好的方法可以对这种周期性数据进行建模并禁止重叠?

postgresql
  • 2 个回答
  • 94 Views
Martin Hope
ivan
Asked: 2022-09-15 15:22:14 +0800 CST

仅当 Y 值相同时才允许多行具有相同的 X 值?

  • 1

给定一个(postgres)表,

CREATE TABLE links (
    id bigint NOT NULL,
    url text NOT NULL,
    owner_id bigint NOT NULL
);

url当且仅当它们也具有相同的owner_id.

即这将是允许的:

 id | url | owner_id
----+-----+---------
  7 | foo |        1
  8 | bar |        1
  9 | bar |        1

但这不会:

 id | url | owner_id
----+-----+---------
  7 | foo |        1
  8 | bar |        1
  9 | bar |        2

有没有办法强制执行这样的约束?

postgresql unique-constraint
  • 2 个回答
  • 59 Views
Martin Hope
ivan
Asked: 2017-05-23 06:48:17 +0800 CST

复合索引中的基数和列顺序 (MySQL/InnoDB)

  • 2

我知道如果您想按索引列的子集进行查询,复合索引中的列顺序很重要,但是如果您查询指定所有索引列的值,那么拥有高基数列是否有任何性能优势早于低基数列?我依稀记得读过一些建议是这种情况的东西,因为它可以更快地缩小结果集,但我现在找不到任何东西来支持它。

我正在使用带有 InnoDB 的 MySQL。InnoDB 使用聚集索引,这可能与我的问题相关,但我认为它只对主键这样做,而我的索引不是。该表看起来像这样:

CREATE TABLE `my_table` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ref_a_id` int(10) unsigned NOT NULL,
  `ref_b_id` int(10) unsigned NOT NULL,
  `is_active` tinyint(1) DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_my_table_on_ref_a_ref_b_is_active` (`ref_a_id`, `ref_b_id`, `is_active`)
) ENGINE=InnoDB AUTO_INCREMENT=2818259 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

关于我的问题, imagineref_a_id的基数比ref_b_id.

mysql index
  • 1 个回答
  • 574 Views
Martin Hope
ivan
Asked: 2015-08-01 11:21:58 +0800 CST

从最小到最大是多表 JOIN 中的经验法则吗?

  • 1

鉴于此查询,

SELECT a.*
FROM a
LEFT JOIN b ON b.a_id = a.id
LEFT JOIN c ON c.a_id = a.id
HAVING COUNT(DISTINCT b.id) < COUNT(DISTINCT c.id)

如果 b 是一个比 c 大得多的表,我执行连接的顺序是否会对性能产生影响?我在某处读到经验法则是从最小到最大连接,但这可能指的是 INNER JOIN。

我意识到在许多情况下结果将取决于外部连接的顺序,但在像上面这样的顺序对准确性无关紧要的情况下,它是否会影响性能?

optimization mysql-5.6
  • 1 个回答
  • 316 Views
Martin Hope
ivan
Asked: 2015-07-11 15:52:36 +0800 CST

“SELECT my_table.id”比“SELECT my_table.*”慢

  • 5

使用 InnoDB 运行 MySQL:

我有一个SELECT wide_table.*查询,我想对其进行细化,SELECT wide_table.id因为这就是所有调用代码所需要的。对其进行测试,我发现使用的执行时间*比使用的执行时间更快id(尽管使用“优化”版本通过网络传输结果的时间更快)。

为什么会这样?

查询(更改名称以保护无辜者)是:

SELECT
    `things`.*
FROM
    `things`
WHERE
    `things`.`active` = 1
        AND (owner_id IS NOT NULL
        AND owner_id > 0)
        AND ((`things`.`status` IN (0 , 1)
        OR `things`.`status` IS NULL))
        AND (date < '2015-07-11 00:00:00');

和上有一个复合索引active,date两个版本都在使用它。

作为参考,输出SHOW CREATE TABLE(省略了不相关的列):

CREATE TABLE `things` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `active` tinyint(1) DEFAULT '0',
  `date` datetime DEFAULT NULL,
  `owner_id` int(11) DEFAULT '0',
  `status` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_things_on_active_and_date` (`active`,`date`),
  KEY `index_things_on_date` (`date`),
  KEY `index_things_on_owner_id` (`owner_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1862 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

限制

玩了一会儿之后,我发现比较受查询限制的影响。对于较大的限制,>200,该*版本报告执行时间更快。随着限制减少<200,id版本获得优势。仍然不确定该怎么做...

解释

在查询的两个版本上运行EXPLAIN会产生相同的输出,带有 select_type:SIMPLE和 key: index_things_on_active_and_date。

mysql innodb
  • 1 个回答
  • 198 Views
Martin Hope
ivan
Asked: 2015-06-26 06:53:52 +0800 CST

将列和索引添加到一个巨大的表

  • 0

我正在使用由 MySQL 数据库支持的 Rails 应用程序。其中一个更常用的模型由一个包含超过 200,000,000 行(并且还在增长)的表提供支持。我们已经意识到它的设置方式是不可扩展的。

我目前正在开发的功能需要我向该表添加几个新列以及一个复合索引。我的同事在她的本地开发机器上进行了测试,每列大约需要一个小时(甚至还没有测试添加索引)。

我们正在考虑采用不同的方法,构建一个包含所需列的新表,将旧表中的数据转储到新表中,然后将 Rails 模型指向新表。感觉像是解决一个迫在眉睫的大问题的短期解决方案,但我很好奇是否有人对如何解决这个问题有见解。

我们还谈到了归档表的旧记录。这是一个可以大量写入和读取的表,但仅限于最近的记录(应用程序可能永远不需要对超过一个月的记录做任何事情)。

mysql migration
  • 1 个回答
  • 1668 Views
Martin Hope
ivan
Asked: 2014-03-17 11:07:36 +0800 CST

将数据从布尔列迁移到 varchar 列

  • 2

我的表目前有一个布尔列,我们称之为“重要”列,反映记录是否紧急。我想过渡到使用反映记录紧迫性的 varchar 列作为几个可能值之一,例如“正常”、“紧急”、“极端”。列名需要更改为,所以我打算做这样的事情:创建一个名为“紧急”的新列来保存正常/紧急/极端值,并有选择地将现有的布尔日期迁移到新列中。

这是一个好方法吗,有什么我应该注意的问题吗?

mysql migration
  • 2 个回答
  • 1744 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