问题标签 [composite-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
175 浏览

cassandra - cassandra 复合索引和紧凑型存储

我是 cassandra 的新手,还没有运行它,但是我的业务逻辑需要创建这样的表。

有没有可能?我只有一列(fID),它不是我的复合索引的一部分,所以我希望我能够应用 compact_storage 设置。请注意我按复合索引的第三列而不是第二列排序。我还需要压缩存储空间,因此不会为每个 fID 重复关键字。

0 投票
1 回答
250 浏览

postgresql - 在这种情况下,为什么 Postgresql 不对我的复合索引使用仅索引扫描?

我的表有整数列“a”、“b”。“a”只有少数(<30)个不同的值,但对于每个“a”,存在大量不同的“b”(>10**7)。为了加快速度,我创建了复合索引 (a,b)。我观察到

跑得快,也

跑得很快,但是

运行(哦,天哪)慢,同样适用

运行解释解释,快速查询使用

但对于慢速查询,使用顺序扫描。

为什么会这样?为什么 Postgresql 后两个查询不使用相同的索引?仅仅是查询计划器的不完善,还是不能使用 Index Only Scan 的更深层次的原因?

0 投票
1 回答
845 浏览

mysql - Overhead of Composite Indexes

I have many tables where I have indexes on foreign keys, and clustered indexes which include those foreign keys. For example, I have a table like the following:

MySQL generates indexes for primary and foreign keys, but sometimes, I want to improve query performance so I'll create clustered or covering indexes. This leads to have indexes with overlapping columns.

If I dropped idx_owner, future queries that would normally use idx_owner would just use idx_owner_status since it has owner as the first column in the index.

Is it worth keeping idx_owner around? Is there an additional I/O overhead to use idx_owner_status even though MySQL only uses part of the index?

Edit: I am really only interested in the way InnoDB behaves regarding indexes.

0 投票
1 回答
33 浏览

sql-server - 在具有罕见更新/插入的表上实现复合索引

我计划一个数据库模式来存储亚马逊产品属性和额外的市场特定值(如标题、艺术家、重量等)

到目前为止,有一个带有列的Products表。GTIN varchar(13) (PK)在我的特定情况下,GTIN 可能是 EAN/UPC/ISBN 标识符。Products 中还有一ASIN char(10)列将 GTIN 与 ASIN 关联。

以编程方式捕获并正确处理同一 ASIN 的 EAN 和 UPC 时的行为,因此请认为所有 ASIN 都是唯一的。我定义了一个UNIQUE NONCLUSTERED CONSTRAINTonASIN并将其与 Products 表相关联为one-to-many

第二个表ProductsData定义ASIN char(10) (FK)mid tinyint(市场 ID)。所有 ASIN 都与各自的市场 ID 一起存储:

正如您所注意到的,还有一rowid int IDENTITY(1,1)列是虚拟的,但实现了唯一性。

假设以下事实:

  • 非常罕见的更新
  • 相对罕见的插入(每个添加的产品在事务中创建 3 条记录)
  • 没有删减
  • ASIN 列上的​​密集选择
  • rowid是一个假人,它只是确保唯一性。

这里有三个问题:

  1. 是否值得在和上创建复合索引ASINmid
  2. 如果是,集群还是非集群?
  3. 我可以摆脱聚集索引rowid因为我真的不需要它吗?
0 投票
1 回答
633 浏览

sql - 选择未索引的列时忽略复合索引 (Oracle)

我们有一个简单的join语句,其中一些when子句可能变成null。该语句由应用程序生成。当我们有 this is null约束时,查询计划就会出现问题。
我们遵循 StackExchange 上的文章中描述的方法,并为列创建了一个复合索引 - 可为空的和我们加入的那个。只有当我们只选择索引列时才有帮助。如果我们选择未索引的列,它将被忽略,而查询结果是相同的 - 例如,没有选择行。

我们看到的唯一选择 - 更改应用程序的逻辑,但可能还有办法在数据库级别解决这个问题?

然后我们检查计划:

1.

计划 1 - 范围扫描

2.

Plan2(上面的相同链接) - 全表扫描

提高性能的最佳方法是什么:更改查询、使用更智能的索引或应用固定计划?

*更新*当我准备这个问题时,我的样本计划自行更改,现在我们有Plan2*而不是 Plan2 - 没有全表扫描。但是,如果我重新创建示例(删除表并再次准备它们) - 计划再次是 Plan2(全表扫描)。这个技巧在实际数据库中不会发生。

0 投票
3 回答
343 浏览

mysql - 复合索引最左列中的通配符是否意味着索引中的剩余列不用于索引查找(MySQL)?

假设您有一个主复合索引last_name,first_name. 然后你执行了搜索WHERE first_name LIKE 'joh%' AND last_name LIKE 'smi%'

last_name 条件中使用的通配符是否意味着在进一步帮助 MySQL 查找索引时不会使用 first_name 条件?换句话说,通过在 last_name 条件上放置通配符,MySQL 只会进行部分索引查找(并忽略 last_name 右侧的列中给出的条件)?

进一步澄清我的要求

示例 1:主键是last_name, first_name.
示例 2:主键是last_name.

使用这个 WHERE 子句:WHERE first_name LIKE 'joh%' AND last_name LIKE 'smi%'Example-1 会比 Example-2 快吗?

更新

这是一个 sqlfiddle: http ://sqlfiddle.com/#!9/6e0154/3

0 投票
2 回答
357 浏览

mysql - InnoDB 复合索引顺序和 INSERT 性能

我有一个包含 3 列的 MySQL 表,我想在其上使用多列索引。A 列是 TINYINT,B 是 SMALLINT,C 是 VARBINARY (16)。我是否应该将索引用作 A、B、C,因为 A 的粒度低于 B 且 B 低于 C 以实现最大 INSERT 速度?

0 投票
1 回答
1560 浏览

mysql - 如何在mysql的范围查询中使用复合索引

我有一个包含两个字段 field1 和 field2 的表“测试”,并创建了一个复合索引 field1_field2(field1, field2)。这是一个 sql: select * from test force index(field1_field2) where field1 > 100 and field2 = 2 limit 200

它运行得不是很好。我解释了一下,发现只有索引查询使用的field1条件,field2条件被忽略了....

我想知道为什么,我需要一个完美的答案

有很多 field1 > 100 的数据和很多 field2 = 2 的数据

0 投票
2 回答
1996 浏览

mysql - 为具有多个 OR 条件和 AND 条件的选择查询创建索引

我有一个如下所示的查询:

我在 table2.email、table2.phone1、table2.phone2、table2.created_at 上有一个索引。这些都是单索引而不是复合索引。据我所知,(table2.email, table2.phone1, table2.phone2) 上的复合索引不起作用,因为条件是 OR 条件。我在 (table2.id, table2.created_at, table2.status, table2.is_test) 上创建了一个复合索引,但在解释查询中得到了相同的结果。解释查询如下所示

这里 com_index 是我创建的复合索引。如何创建索引以加快此查询。从解释结果看,为查询选择的键是 created_at。有没有办法可以为表 2 创建复合索引?请帮我。提前致谢。

编辑:解释这个查询的生产:

0 投票
1 回答
800 浏览

c# - 谷歌云数据存储:综合索引:排序似乎不起作用

我正在使用带有 (C#) .NET 代码的 Google Cloud 数据存储,我在数据存储中有名为 Audit 的表,其中包含以下列

ID/Name (long), ID (long), ActionType (String), GroupType (String), DateTime (TimeStamp), CompanyID (long), UserID (long), ObjectID (long), IsDeleted (boolean)

仅供参考,ID/Name 和 ID 都包含相同的信息

我想像这样运行 GQL 查询

SELECT * FROM Audit WHERE GroupType='XYZ' AND ActionType='CREATED' AND CompanyID=152738292 and IsDeleted=false 按 ID 排序

我似乎没有得到正确的复合键并不断收到“您的数据存储没有此查询所需的复合索引(开发人员提供)”

这是使用 index.yaml 创建的复合索引。

任何有关此主题的帮助将不胜感激!

如果您需要更多信息,请告诉我