小编mus*_*cio的帖子

如何编写按日期计算行数的查询?

我有一个名为emp1. 有一个名为 的表tx_feeder。我想从该表中获取行数。

我使用以下查询来获取单日数据,

select count (*) from tx_feeder 
where datum between (select sysdate -31 from dual) and (select sysdate -1 from dual); 

SQL> 3455890
Run Code Online (Sandbox Code Playgroud)

它将给出整个月的计数。但是,我不想获得整个月的计数,而是希望通过单个 SQL 查询获得如下所示的输出,即一个月中每天的总计数。

     sysdate -31 = 11190  
     sysdate -30 = 13390  
     sysdate -29 = 65790  
     sysdate -28 = 44390   
     ........  
     sysdate -1 = 14590
Run Code Online (Sandbox Code Playgroud)

mysql

3
推荐指数
1
解决办法
6万
查看次数

MySQL MVCC 实现

问题是关于 MySQL InnoDB 表中同时 SELECT 和 UPDATE 的行为:

我们有一个相对较大的表,我们定期扫描读取多个字段,包括名为 LastUpdate 的字段。在扫描期间,我们更新先前扫描的行。更新在后台线程中批处理和执行 - 使用不同的连接。需要注意的是,我们更新已读取的行。

三个问题:

  1. InnoDB 是否会保存更新行的先前版本,因为SELECT它仍在进行中?
  2. READ-UNCOMMITTED用于SELECT帮助吗?
  3. 如何确认 InnoDB 在其重做日志中保存或不保存修改行的先前版本。

mysql innodb isolation-level

3
推荐指数
1
解决办法
830
查看次数

修订后的问题:如何防止 Oracle 12c 数据库在机器启动时启动

我之前发布过关于srvctl,没有意识到只有在安装了网格基础设施时才使用它,在我的情况下,它不是。

无论如何,我在我的 Windows 8.1 pro 个人机器上安装了 Oracle 12c 数据库,用于测试目的(实际上是学校作业)。因此,我不希望每次登录我的 PC 时它都会启动。SQL shutdown每次登录时都被迫运行很麻烦(我意识到我可以编写批处理脚本,但这是最后的手段)。

我无法弄清楚启动时启动 Oracle 实例的服务是什么。有谁知道是做什么的?我一直在梳理 Oracle Doc,但似乎无法找出它是什么。

TL;DR:只是试图阻止我的 Oracle 数据库在 PC 启动时初始化。

oracle oracle-12c

2
推荐指数
1
解决办法
2022
查看次数

MySQL/InnoDB - 带有 UUID 的聚类索引

在 MS SQL Server 中,可以在非主、非唯一键上聚集索引。例如,如果我想在插入日期创建一个聚集索引以防止在 UUID 主键中间插入时页面拆分和碎片,SQL Server 将为此执行后台工作。

在 MySQL/InnoDB 中,聚集索引将在添加到表中的第一个主键或唯一键上创建。除了添加非 UUID 主键或不构建任何唯一键之外,如何避免主要碎片?有没有其他引擎可以更好地工作?

如果不可避免,除了定期重建聚集索引之外,是否可以采取任何措施来缓解该问题?

mysql performance clustered-index uuid

2
推荐指数
1
解决办法
2981
查看次数

SQL Server 对象并发

背景: SQL Server Version 2014,设计的是发票订单系统。

我有几个问题来确认我对 SQL Server 并发性的看法。作为简要背景,创建此模型的开发人员构建了每个订单库存表(属于订单的一部分的项目)和带有InUse字段的订单表(订单)。会发生的情况是,当销售人员尝试更新订单时,通过更改订购商品的名称(例如需要将一本名为《哈利波特》的书重命名为《哈利波特》),如果其他人正在阅读该数据,他们就不能访问对象。

实际的数据库设计是这样的:该SalesOrder表将具有SalesPersonIdInUse列设置为1,没有人可以访问OrderId。这意味着对于每次读取、更新、插入或删除,都会发生三个事务:首先将更新设置InUse为 1,以便没有人可以访问特定的OrderId然后是实际事务,然后是将最终更新设置InUse为 0 以允许人们访问那个OrderId。这意味着多次读取和写入而不是更少 - 随着规模的扩大,性能噩梦!

开发人员解释说,如果两个用户尝试写入或更新订单中的项目,这可以解决并发问题。嗯?

根据我对 SQL Server 的了解,如果两个用户尝试写入相同的顺序——比如添加两个新项目,它们都会被添加,因为这些将作为元数据插入日志中,然后添加到磁盘上。另外,如果插入物完全相同,我们应该设计具有唯一约束的表来防止这种情况(公平地说,该开发人员根本不使用约束和外键),因此不会发生第二次插入。这意味着两个用户可以将插入写入同一个表,并且插入通常会很快发生。

此外,如果两个用户正在更新同一个记录——比如说一个OrderItemId名字为“Harry Potter”的 1 来更新为“Harry Potter”(这是一个特定的项目OrderId),即使是两个不同的更新也会发生,但是第二个无关紧要,因为它是相同的更新。 只有当对同一对象发生两次不同的更新时,例如更新一是“哈利波特”,更新二是“哈利波特”,才会出现问题,因为它们不同。但是,不允许用户访问对象并不能解决这个问题(他的设计),因为用户一个的更新可能是错误的更新,从而锁定了用户 2(反之亦然)。

我不明白这个设计;对我来说,它反映了对SQL Server并发的完全误解,以及SQL数据库如何处理事务,而且他创建的大部分内容已经由SQL Server在后端处理(除了没有解决错误更新的问题) . 但是,也许我遗漏了一些东西,其他人可以启发我这是 SQL Server 的标准做法(我以前从未见过这种设计)。

sql-server concurrency sql-server-2014

2
推荐指数
1
解决办法
129
查看次数

解决教授和我自己关于解释 ERD 中鱼尾纹符号的争论

我正在大学介绍数据库对象课程。

我与教授在如何解释 ERD 图中基数的鱼尾纹符号方面存在分歧。

示例:看看这张图片(我从演讲幻灯片中提取的一张图片):

在此处输入图片说明

根据我的解释,这表明:

  • 供应商可能有 0 个或多个发货
  • 一批货物可能只属于一个供应商
  • 一个客户可能有 0 个或多个订单
  • 一个订单可能只属于一个客户

但是,根据我导师的解释,这表明:

  • 一个货件可能有 0 个或多个供应商
  • 一个供应商只能有一个发货
  • 一个客户可能只有一个订单
  • 一个订单可能有很多客户

我一直无法找到任何证据来证明我自己对此的理解……但是,再说一次,我只是一个学生。也许我错过了什么?如果我是,我想弄清楚我哪里出错了。

erd database-design

2
推荐指数
1
解决办法
390
查看次数

SQL Server 2019中的复制问题

我已经安装了 SQL Server 2019 RC1,但无法创建快照。当我运行快照代理时,我不断收到相同的消息:

2019-10-30 12:32:41.59 Microsoft (R) SQL Server Snapshot Agent
2019-10-30 12:32:41.59 [Assembly Version = 15.0.0.0, File Version = 15.0.1900.25]
2019-10-30 12:32:41.59 Copyright (c) 2016 Microsoft Corporation.
2019-10-30 12:32:41.59 The timestamps prepended to the output lines are expressed in terms of UTC time.
2019-10-30 12:32:41.59 User-specified agent parameter values:
2019-10-30 12:32:41.59 --------------------------------------
2019-10-30 12:32:41.59 -Publisher DB100
2019-10-30 12:32:41.59 -PublisherDB REF3_DB
2019-10-30 12:32:41.59 -Publication REF3_PDR4
2019-10-30 12:32:41.59 -Distributor DB100
2019-10-30 12:32:41.59 -DistributorSecurityMode 1
2019-10-30 12:32:41.59 -XJOBID 0xA694274CD89FAF418C8B059F22C01B85
2019-10-30 …
Run Code Online (Sandbox Code Playgroud)

replication sql-server sql-server-2019

2
推荐指数
1
解决办法
6960
查看次数

为什么低选择性列上的索引会损害查询性能

表很简单:

CREATE TABLE `t1` (
  `ID` int NOT NULL AUTO_INCREMENT,
  `name` int DEFAULT '1',
  `LastName` int DEFAULT '0',
  UNIQUE KEY `idx_ID` (`ID`) USING BTREE,
  KEY `idx_name` (`name`)
) ENGINE=InnoDB;

DELIMITER $$
DROP PROCEDURE IF EXISTS populate_t1;
CREATE PROCEDURE populate_t1(IN num INT)
BEGIN
    DECLARE COUNT INT DEFAULT 0;
    WHILE COUNT < num DO
        INSERT INTO t1(`name`,`LastName`) VALUES(round(rand()+5, 0), round(rand()*10000, 0));
        SET COUNT = COUNT + 1;
    END WHILE;
END $$
DELIMITER ;

CALL populate_t1(1000000);
CREATE INDEX idx_name ON t1 (`name`);
OPTIMIZE …
Run Code Online (Sandbox Code Playgroud)

mysql performance index select

2
推荐指数
1
解决办法
73
查看次数

Postgresql pg_toast 表,它们是强制性的吗?

我在 PostgreSQL v13 中有一个小模式,只有模式结构,但仍然没有数据。

我所看到的是,我得到了一些pg_toast普通表的表,尽管里面没有数据。我有一个包含 5 列的简单表,其中一些是 varchar=200 长度和 inte=19 长度。

pg_toast当我没有向表中插入任何数据时,为什么我会得到这些表。pg_toast我可以看到表pg_class与列的关系reltoastrelid

这些表有 0 KB 数据,根据:

pg_relation_size(reltoastrelid) AS toast_size
Run Code Online (Sandbox Code Playgroud)

唯一拥有pg_toast数据的是:pg_rewritepg_statistic

postgresql

2
推荐指数
1
解决办法
3077
查看次数

SQL Server 中的 Oracle 表空间相当于什么

我的任务是根据 DDL 将 Oracle 数据库转换为 SQL Server。Oracle建表语句示例如下:

  CREATE TABLE "RENTAL"."ADDRESS" 
   (    "ID" NUMERIC(8,0), 
    "TOWN" NVARCHAR(40), 
    "COUNTY" NVARCHAR(40), 
    "POSTCODE" NVARCHAR(10)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 163840 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "AAA_123" ;
Run Code Online (Sandbox Code Playgroud)

这里是什么TABLESPACE?它在 SQL Server 中是否有等效项?数据库中似乎使用了 6 个不同的表空间。

(我一直认为表名中点之前的部分(本例中为 RENTAL)称为表空间)

oracle sql-server migration

2
推荐指数
1
解决办法
1202
查看次数