标签: limits

如何将表中的最大行数限制为 1

我的 SQL Server 数据库中有一个配置表,该表应该只有一行。为了帮助未来的开发人员理解这一点,我想防止添加多于一行的数据。我选择为此使用触发器,如下所示......

ALTER TRIGGER OnlyOneConfigRow
    ON [dbo].[Configuration]
    INSTEAD OF INSERT
AS
BEGIN
    DECLARE @HasZeroRows BIT;
    SELECT  @HasZeroRows = CASE
        WHEN COUNT (Id) = 0 THEN 1
        ELSE 0
    END
    FROM
        [dbo].[Configuration];

    IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0
    BEGIN
        RAISERROR ('You should not add more than one row into the config table. ', 16, 1)    
    END
END
Run Code Online (Sandbox Code Playgroud)

这不会引发错误,但不允许第一行进入。

还有比这更有效/更自我解释的方法可以将可以插入表中的行数限制为 1 吗?我是否缺少任何内置的 SQL Server 功能?

trigger sql-server insert limits row

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

MongoDB 在内存不足时终止

我有以下配置:

  • 一台运行三个 docker 容器的主机:
    • MongoDB
    • Redis
    • 使用前两个容器存储数据的程序

Redis 和 MongoDB 都用于存储海量数据。我知道 Redis 需要将所有数据保存在 RAM 中,我对此没有意见。不幸的是,发生的情况是 mongo 开始占用大量 RAM,一旦主机 RAM 已满(我们在这里谈论的是 32GB),mongo 或 Redis 就会崩溃。

我已经阅读了以下有关此问题的先前问题:

  1. 限制 MongoDB RAM 使用:显然大部分 RAM 已被 WiredTiger 缓存占用
  2. MongoDB 限制内存:这里显然问题是日志数据
  3. 限制 MongoDB 中的 RAM 内存使用:这里他们建议限制 mongo 的内存,以便它使用较少的内存来缓存/日志/数据
  4. MongoDB 使用太多内存:这里他们说它是 WiredTiger 缓存系统,它倾向于使用尽可能多的 RAM 来提供更快的访问。他们还表示it's completely okay to limit the WiredTiger cache size, since it handles I/O operations pretty efficiently
  5. 有没有限制mongodb内存使用的选项?: 再次缓存,他们还添加MongoDB uses the LRU (Least Recently Used) cache algorithm …

mongodb memory limits docker

17
推荐指数
2
解决办法
2万
查看次数

“限制 1000,25”与“限制 25 偏移 1000”

最近我发现 MySQL 有一个offset特性。我一直在寻找有关偏移结果的文档,或者偏移量和限制变量之间的差异,但我似乎找不到我要找的东西。

假设我在一个表中有 10.000 行,我想要 25 个结果,来自第 1.000 行。就目前而言,我可以同时执行两者以获得相同的结果:

SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
Run Code Online (Sandbox Code Playgroud)

我想知道的是两者之间的区别。

  • 这实际上是一样的还是我的理解错误?
  • 在较大的表中是否更慢/更快
  • 当我这样做时偏移的结果是否会改变WHERE column=1(比如列有 >100 个不同的值)
  • 我这样做时偏移的结果是否会改变ORDER BY column ASC(假设它具有随机值)

我有一种感觉 offset 跳过了数据库中找到的前 X 行,不考虑排序和 where。

mysql limits

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

由于 WHERE 子句中有超过 100,000 个条目,SQL Server 错误 8632

我的问题(或至少是错误消息)与查询处理器耗尽内部资源非常相似- 非常长的 sql query

我的客户正在使用 SQL 选择查询,其中包含一个恰好包含 100,000 个条目的 where 子句。

查询失败,错误 8632 和错误消息

内部错误:已达到表达式服务限制。请在您的查询中寻找潜在的复杂表达式,并尝试简化它们。)

我发现抛出此错误消息非常奇怪,正好是 100,000 个条目,所以我想知道这是否是一个可配置的值。是这种情况吗?如果是,我怎样才能将此值增加到更高的值?

MSDN 上,有人提议重新编写查询,但我想避免这种情况。

同时我发现我正在谈论的条目列表包含自然数,其中相当一部分似乎是连续的(例如 (1,2,3,6,7,8,9,10,12, 13、15、16、17、18、19、20)。

这使得 SQL where 子句类似于:

where entry in (1,2,3,6,7,8,9,10,12,13,15,16,17,18,19,20)
Run Code Online (Sandbox Code Playgroud)

我可以将其转换为:

where (entry between 1 and 3) OR
      (entry between 6 and 10) OR
      (entry between 12 and 13) OR
      (entry between 15 and 20)
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式缩短:

where entry in (1,...,3,6,...,10,12,13,15,...,20)
Run Code Online (Sandbox Code Playgroud)

......或类似的东西?(我知道这是一个长镜头,但它会使软件更新更容易和更易读)

供您参考: where 子句中的数据是在另一个表上完成的计算结果:首先在开始时读取并过滤该表的条目,然后进行一些额外的处理(这是不可能使用的SQL),额外处理的结果是更多的过滤,并且结果用于 where 子句中。由于无法在 SQL 中编写完整的过滤,因此使用了上述方法。显然, where 子句的内容可能会在每次处理时发生变化,因此需要动态解决方案。

sql-server configuration limits

16
推荐指数
4
解决办法
1万
查看次数

ANSI/ISO LIMIT 标准化计划?

目前是否计划标准化一种限制查询返回结果数量的最佳方法?

是否有 ANSI SQL 替代 MYSQL LIMIT 关键字的堆栈溢出问题列出了用不同语言处理这种行为的各种方法:

DB2 -- select * from table fetch first 10 rows only 
Informix -- select first 10 * from table 
Microsoft SQL Server and Access -- select top 10 * from table 
MySQL and PostgreSQL -- select * from table limit 10 
Oracle -- select * from (select * from table) where rownum <= 10
Run Code Online (Sandbox Code Playgroud)

我不经常玩数据库,所以我在这里说的是无知,但似乎这是一个非常重要的功能 - 至少足够重要,当我看到它被留给供应商时我会挠头。

limits sql-standard

12
推荐指数
1
解决办法
3926
查看次数

如何检查我是否达到了 Express Edition 的大小限制?

我很迷惑。AFAIK SQL Server 2005 Express 的数据库 数据大小限制为 4GB 。但是我有以下结果sp_spaceused

数据库的实际大小是多少

  1. 如何检查我的数据库是否达到了大小限制?
  2. 是未分配的空间space left直到我达到限制吗?
  3. 我还剩多少空间?
  4. 是否index_size在极限算?

sql-server-2005 sql-server sql-server-express limits

10
推荐指数
2
解决办法
3万
查看次数

为什么*不*错误:索引“foo”的索引行大小 xxxx 超过最大值 2712?

我们一再看到尝试索引值超过最大大小的列失败。Postgres 10 有这样的错误信息:

ERROR:  index row size xxxx exceeds maximum 2712 for index "foo_idx"
HINT:  Values larger than 1/3 of a buffer page cannot be indexed.
       Consider a function index of an MD5 hash of the value, or use full text indexing.
Run Code Online (Sandbox Code Playgroud)

例子:

等等。

现在,a_horse_with_no_name 演示了一个具有更大text值(10000 个字符)的案例,它似乎仍然适用UNIQUE于 Postgres 9.6 中的索引。引用他的测试用例:

create table tbl (col text);
create unique index on tbl (col);

insert into tbl
values (rpad(md5(random()::text), 10000, md5(random()::text)));

select length(val) …
Run Code Online (Sandbox Code Playgroud)

postgresql index size limits

9
推荐指数
1
解决办法
6817
查看次数

COUNT(*) 给出超过 1 且 LIMIT 1?

我正在尝试计算旧记录。LIMIT 1在这种情况下,即使我设置了一些限制,为什么 Postgres 仍会给出 1160 的结果?

SELECT COUNT(*) FROM data WHERE datetime < '2015-09-23 00:00:00' LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
 count
--------
1160
(1 row)
Run Code Online (Sandbox Code Playgroud)

我期望的结果是 1 或 0,但结果是 1160。为什么?

postgresql count limits

7
推荐指数
1
解决办法
9601
查看次数

Postgres 使用 order by、index 和 limit 进行慢速查询

我正在尝试提高 postgres(9.6) 查询的性能。这是我的架构,表包含大约 6000 万行。

          Column          |            Type             | Modifiers
--------------------------+-----------------------------+-----------
 transaction_id           | text                        | not null
 network_merchant_name    | text                        |
 network_merchant_id      | text                        |
 network_merchant_mcc     | integer                     |
 network_merchant_country | text                        |
 issuer_country           | text                        |
 merchant_id              | text                        |
 remapped_merchant_id     | text                        |
 created_at               | timestamp without time zone |
 updated_at               | timestamp without time zone |
 remapped_at              | timestamp without time zone |
Indexes:
    "mapped_transactions_pkey" PRIMARY KEY, btree (transaction_id)
    "ix_mapped_transactions_remapped_at" btree (remapped_at NULLS FIRST)
Run Code Online (Sandbox Code Playgroud)

这是我试图执行的查询。

SELECT * …
Run Code Online (Sandbox Code Playgroud)

postgresql performance order-by limits postgresql-9.6 query-performance

7
推荐指数
1
解决办法
3985
查看次数

UPDATE 只有一行(使用更新和连接)

我正在尝试获得一个快速、简单的 sql 查询,以便在使用 join 时一次只更新一行。

我试过了LIMIT,但没有成功。

询问:

UPDATE
table1
JOIN
table2 ON table2.col=table1.col
SET 
table1.row1='a value'
WHERE
table1.row2 LIKE '%something%' 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

信息:

错误代码:1221. UPDATE 和 LIMIT 的错误用法

mysql join update limits

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