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
    • 最新
    • 标签
主页 / dba / 问题

问题[index](dba)

Martin Hope
DaPeda
Asked: 2024-08-27 17:25:58 +0800 CST

根据查询公式不使用 MongoDB 索引

  • 5

我们在某项服务中看到,某些查询总是导致出现COLLSCAN,而不是使用适当的索引。数据的形式为

{_id: DocumentID, "field": {"child": "Cross-App-ID"}}

带有索引{"field.child":1}。

运行“field.child”查询,db.collection.find({"field.child":"CA-ID"})即使用索引时,工作正常。但是,出于某种原因,访问数据库的应用程序将查询创建为db.collection.find({"field":{"child":"CA-ID"}}),结果为COLLSCAN而不是IXSCAN。

对此我有两个疑问:

  • 这些查询难道不应该是等效的并且被同等对待吗?
  • 如何为第二个用例创建索引?我发现的所有示例都像我们已经做的那样创建了索引。
index
  • 1 个回答
  • 15 Views
Martin Hope
DaPeda
Asked: 2024-07-31 22:29:38 +0800 CST

总计解除后的索引使用情况

  • 5

我们的 MongoDB 中有一个集合,由于用例的改变,到目前为止,一个小查询现在真的很慢。所讨论的聚合有点像这样:

db.collection.aggregate([
  {
    $match: {
      "_id": {
        $in: [ list of 1000 ids ]
      }
    }
  },
  {
    $unwind: "array_field"
  },
  {
    $match: {
      "array_field.sub_field": 123456789
    }
  }
])

{"_id": 1, "array_field.sub_field": 1}我现在的问题是,这里是否会考虑类似的索引,或者是否有必要让开发人员将第二个$match索引移到第一个索引?

遗憾的是,在可预见的未来,数据模型的重新设计还未实现。

index
  • 1 个回答
  • 14 Views
Martin Hope
Brainfuck
Asked: 2024-05-15 17:34:26 +0800 CST

如何在 MongoDB 中创建不区分大小写的唯一复合索引?

  • 5

如何在 MongoDB 中创建不区分大小写的唯一复合索引?

问题正文:我正在尝试在 MongoDB 中使用以下字段创建复合唯一文本索引:

tenant_id: 1 seller_id: 1 seller_sku_code: text。但是,我在尝试创建索引时遇到错误:

索引构建失败:4df81a22-042f-4e51-bbec-b0f8a7dafe2e:
收集 product_db.skus(83cc8978-b0fe-4c4b-ae58-691e32db7f95)
::由::E11000 重复键错误
收集引起:product_db.skus 索引:tenant_id_1_seller_id_1_seller_sku_code_text dup key:{tenant_id:“1”,seller_id:“113”,_fts:“acc”,_ftsx:0.75}

我需要确保 seller_sku_code 在数据库中是唯一的,并且不区分大小写。例如:

不应同时允许“ABC”和“abc”。应允许“ACC-2001”和“ACC-2000”共存。

如何在 seller_sku_code 上创建这个唯一的、不区分大小写的索引,同时仍确保 tenant_id 和 seller_id 字段的唯一性?

index
  • 1 个回答
  • 28 Views
Martin Hope
Abdul Jabbar
Asked: 2024-03-27 13:12:26 +0800 CST

Whatsapp 如何搜索/索引加密聊天特别 IndexedDB、可搜索加密

  • 5

我们的团队开发了一款基于IndexedDB支持跨平台的混合应用程序。该应用程序现在具有聊天功能,我们希望存储聊天内容以供离线阅读。但根据经验,我们可以以纯文本形式存储聊天的元数据,但不能存储实际的聊天消息文本内容。因此,我们决定对它们进行加密。

问题:现在,当用户想要搜索包含任何特定单词的消息时,问题就出现了,它可以是任何语言或文本。

我们尝试研究Whatsapp此功能的实现方式,并遇到了多篇文章,例如https://www.group-ib.com/blog/whatsapp-forensic-artifacts/和其他一些文章,但它显示了本机应用程序、sqlite数据库(msgstore.db) 、 wa.db 等)在根文件夹中甚至没有一个字段被加密。虽然有一些数据库是加密的,msgstore.db.cryptxx但它们大多是备份。

问题

  1. 我们是否应该假设 Whatsapp 仅在发送和接收时加密消息而不存储?

  2. Whatsapp 是否以纯文本形式存储IndexedDBWeb 消息?除了元数据之外我们找不到任何东西。

  3. 如果 Whatsappsqlite或 IndexedDB for web 对每条消息进行加密,那么它如何执行消息搜索?

  4. 我们有什么选择?我们应该如何在 IndexedDB 中存储既可以加密又可以搜索的消息?

有一个与此相关的问题,但既没有正确的答案,也没有询问最终用户可以轻松查看的 IndexedDB。

index
  • 1 个回答
  • 25 Views
Martin Hope
Dirk Boer
Asked: 2024-02-29 07:16:01 +0800 CST

为什么唯一键上不允许忽略重复键?

  • 5

如果我正确理解这个Index答案,则with Is Unqiueon 和 a之间的区别Unique Key主要是表面上的。

在 MSSQL 界面中,当我切换到唯一键时,该键Ignore Duplicate Keys被禁用。

我理解有问题吗?我想Ignore Duplicate Keys在这种情况下使用。Index当我执行 an withIs Unique与 a时,会产生什么后果Unique Key?

输入(启用下拉菜单)Index:Is Unique

IsUnique 打开的索引

类型Unique Key(禁用下拉菜单):

独特的钥匙

index
  • 1 个回答
  • 35 Views
Martin Hope
dave111
Asked: 2024-02-29 05:32:39 +0800 CST

添加PK后看不到表分区

  • 6

我在 Azure SQL 上,向一些历史存档表添加每月分区(使用分区方案/函数创建第二个表,并将原始表中的行转储到其中)。我使用查询来查看所有分区号和日期范围,并且在将数据插入新表后能够看到所有内容,但是在添加 PK 约束后,我的查询停止返回行,或者如果我注释掉联接在 sys.index 表和下面我只看到一个分区。我不太确定需要对下面的查询进行哪些修改。

数据定义语言:

CREATE PARTITION FUNCTION [PF_YearMonthBiWeekly] (datetime)
AS RANGE RIGHT FOR VALUES 
(
    '2024-01-01', '2024-01-16', '2024-02-01', '2024-02-16', '2024-03-01', '2024-03-16', '2024-04-01', '2024-04-16', '2024-05-01', '2024-05-16', '2024-06-01', '2024-06-16', '2024-07-01', '2024-07-16', '2024-08-01', '2024-08-16', '2024-09-01', '2024-09-16', '2024-10-01', '2024-10-16', '2024-11-01', '2024-11-16', '2024-12-01','2024-12-16',
    '2025-01-01'
);
GO

CREATE PARTITION SCHEME PS_YearMonthBiWeekly
AS PARTITION [PF_YearMonthBiWeekly]
ALL TO ([PRIMARY])
GO

CREATE TABLE [dbo].[Table1]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Test_ID] [int] NULL,
    [Metric_ID] [int] NULL,
    [Metric_Desc] [nvarchar](300) NULL  
    [Result_On] [datetime] NULL,
) ON [PS_YearMonthBiWeekly] ([Result_On]);

插入数据,查询工作,然后添加PK:

ALTER TABLE [dbo].[Table1] 
ADD CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( [ID] ASC )
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

分区视图查询:

SELECT
    OBJECT_SCHEMA_NAME(pstats.object_id) AS SchemaName
    ,OBJECT_NAME(pstats.object_id) AS TableName
    ,pstats.partition_number AS PartitionNumber
    ,pstats.row_count AS PartitionRowCount
    ,c.name AS PartitionKey
    ,CASE 
        WHEN pf.boundary_value_on_right = 0 
        THEN c.name + ' > ' + CAST(ISNULL(LAG(prv.value) OVER(PARTITION BY pstats.object_id ORDER BY pstats.object_id, pstats.partition_number), 'Infinity') AS VARCHAR(100)) + ' and ' + c.name + ' <= ' + CAST(ISNULL(prv.value, 'Infinity') AS VARCHAR(100)) 
        ELSE c.name + ' >= ' + CAST(ISNULL(prv.value, 'Infinity') AS VARCHAR(100))  + ' and ' + c.name + ' < ' + CAST(ISNULL(LEAD(prv.value) OVER(PARTITION BY pstats.object_id ORDER BY pstats.object_id, pstats.partition_number), 'Infinity') AS VARCHAR(100))
    END AS PartitionRange
    ,pf.name AS PartitionFunctionName
    ,ps.name AS PartitionSchemeName
    ,ds.name AS PartitionFilegroupName
    ,CASE pf.boundary_value_on_right WHEN 0 THEN 'Range Left' ELSE 'Range Right' END AS PartitionFunctionRange
    ,CASE pf.boundary_value_on_right WHEN 0 THEN 'Upper Boundary' ELSE 'Lower Boundary' END AS PartitionBoundary
    ,prv.value AS PartitionBoundaryValue
    ,p.data_compression_desc AS DataCompression
    ,case 
        when i.[type] = 0 then 'Nonclustered Heap Index'
        when i.[type] = 1 then 'Clustered Index'
        when i.[type] = 2 then 'Nonclustered Unique Index'
        when i.[type] = 3 then 'XML Index'
        when i.[type] = 4 then 'Spatial Index'
        when i.[type] = 5 then 'Clustered Columnstore Index'
        when i.[type] = 6 then 'Nonclustered Columnstore Index'
        when i.[type] = 7 then 'Nonclustered Hash Index'
        else NULL
    end as index_type
FROM sys.dm_db_partition_stats AS pstats
INNER JOIN sys.partitions AS p 
    ON pstats.partition_id = p.partition_id
INNER JOIN sys.destination_data_spaces AS dds 
    ON pstats.partition_number = dds.destination_id
INNER JOIN sys.data_spaces AS ds 
    ON dds.data_space_id = ds.data_space_id
INNER JOIN sys.partition_schemes AS ps 
    ON dds.partition_scheme_id = ps.data_space_id
INNER JOIN sys.partition_functions AS pf 
    ON ps.function_id = pf.function_id
LEFT OUTER JOIN sys.indexes AS i 
    ON pstats.object_id = i.object_id 
    AND pstats.index_id = i.index_id AND dds.partition_scheme_id = i.data_space_id 
    --AND i.type <= 1 /* Heap or Clustered Index */
INNER JOIN sys.index_columns AS ic 
    ON i.index_id = ic.index_id 
    AND i.object_id = ic.object_id 
    AND ic.partition_ordinal > 0
INNER JOIN sys.columns AS c 
    ON pstats.object_id = c.object_id 
    AND ic.column_id = c.column_id
LEFT JOIN sys.partition_range_values AS prv 
    ON pf.function_id = prv.function_id 
    AND pstats.partition_number = (CASE pf.boundary_value_on_right WHEN 0 THEN prv.boundary_id ELSE (prv.boundary_id+1) END)
--WHERE pstats.object_id = OBJECT_ID('Table1')
--ORDER BY TableName, PartitionNumber;
GO 
index
  • 1 个回答
  • 24 Views
Martin Hope
Racer SQL
Asked: 2024-01-16 10:54:40 +0800 CST

对于 5tb 数据库和索引维护来说,什么是好的策略?

  • 4

我们使用 ollas 索引维护,并由我们的团队在各处进行了一些更改。

我们通常会遇到一个巨大的数据库问题,它的 Alter 索引会锁定某些进程。它通常是一个重组,即使它锁定了一些任务,例如批量任务。

我们可以做什么来尽量减少这种情况?nob每周日运行超过24小时。

我想到了拆分表,并在不同的周末进行索引维护。

我想到了一个警报,它会杀死该锁的工作 X 分钟(很糟糕,因为我确信它永远不会完成)。

index
  • 1 个回答
  • 41 Views
Martin Hope
Ken Schnetz
Asked: 2023-11-15 07:32:34 +0800 CST

我是否应该对每年增长约 10 亿行的表使用此分区/索引策略?

  • 7

我是一名软件工程师,拥有大约 10 年为小型企业构建 Laravel Web 应用程序的经验。我对数据库设计非常满意,但这不是我最大的优势。

我构建的应用程序之一是用于监控电子邮件通讯打开和点击的第三方工具。该应用程序存储打开和单击事件,该工具的用户查询这些事件以查看他们的电子邮件通讯的运行情况。分析事件表当前的行数约为 15 亿,相当于一年半的数据。

我计划迁移到新的数据库设计,并想看看我对数据库设计的理解是否步入正轨。

这些是新数据库的表: 在此输入图像描述

Table contacts {
  id integer
  email_address string
  created_at datetime
  updated_at datetime
  indexes {
    id [pk]
    email_address
    created_at
  }
}

Table contact_opens {
  id unsignedBigInteger
  contact_id integer
  sent_at datetime
  opened_at datetime
  indexes {
    id [pk]
    (contact_id, sent_at)
    sent_at
    opened_at
  }
}

Table contact_clicks {
  id unsignedBigInteger
  contact_id integer
  sent_at datetime
  clicked_at datetime
  indexes {
    id [pk]
    (contact_id, sent_at)
    sent_at
    clicked_at
  }
}

我计划在具有 64GB RAM 的专用 linode 服务器上使用 MariaDB,按日历月对数据库进行分区,并按如下方式调整 InnoDB:

innodb_buffer_pool_size = 48GB
InnoDB File-Per-Table = ON
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = 0_DIRECT
innodb_log_file_size = 8GB
table_open_cache = 20

针对该数据库的查询将根据打开次数和点击次数对联系人进行分段。例如:

  • 过去 30 天内打开了 5 个或更多的联系人
  • 过去 5 天内至少点击 1 次的联系人
  • 过去 30 天内每天点击 1 次的联系人
  • 等,标准电子邮件通讯分段查询(如 Mailchimp 上所示)

查询一次将返回 10k-300k 个联系人。

我做了相当多的研究,看来索引、分区和/或分片似乎是帮助加快查询速度的最佳选择。索引和分区的组合似乎最适合这个特定的用例。

这种使用听起来是否像一个健全的数据库设计,其中 opens 表每年增长约 10 亿行,clicks 表每年增长约 3 亿行?

更新 1: 架构不会改变。它与几年前的设计方式相比略有变化,但只是为了适应本问题中概述的更改,以使查询更快。

更新 2: 300k~ 联系人查询用于群发邮件(电子邮件通讯)。更新了上面 MySQL 表中的数据类型。

index
  • 1 个回答
  • 71 Views
Martin Hope
Bear Bile Farming is Torture
Asked: 2023-10-11 13:47:00 +0800 CST

前缀为连续/高基数的复合索引的有效性

  • 5

架构:

{
  time_utc: "milliseconds",
  city: "string",
  age: "integer"
}

指数:

{
  time_utc: 1,
  city: 1,
  age: 1
}

示例查询:

col.aggregate([
  {
    $match: { time_utc: { $exists: true }  city: "new york", age: { $gt: 18 } }
  },
  {
    $sort: { time_utc: -1 }
  }
])

我确信在这个查询中将使用复合索引,这样排序就会高效。

然而,$match文档/过滤阶段似乎效率不高,因为我们可以假设它time_utc在整个集合中是唯一的。

假设集合中有 100 万个文档,只返回 10 个。我们进一步假设这 10 个文档位于排序的底部time_utc。

在这种情况下,查询必须扫描索引的整个 100 万个值才能发现 10 个文档。这相当于完​​整的集合扫描。

让我们假设相反, 中只有 2 个唯一值time_utc。在这种情况下,看起来city和age字段的索引实际上是有效的。

我的推理正确吗?

index
  • 2 个回答
  • 27 Views
Martin Hope
Bear Bile Farming is Torture
Asked: 2023-08-03 01:13:40 +0800 CST

当查询中使用的字段不可预测时如何建立索引?

  • 4

在集合A中,每个文档最多包含100个字段。数据库 mongoDB 只允许在单个集合上最多有 64 个索引。

对此集合的查询需要索引。此查询的过滤器或$match阶段可以使用 100 个字段的任意组合来完成。

即使创建64个索引,最多也只能覆盖64个字段。

问题:

这意味着,如果根据未索引的 36 个字段中的任何一个对查询进行过滤,则必须进行集合扫描才能完成查询。

问题:

是否有替代方法来优化此查询,防止在此查询的所有可能组合中进行集合扫描?

index
  • 2 个回答
  • 33 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