问题标签 [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 投票
2 回答
696 浏览

mysql - MySQL Innodb:大型复合 PK 没有其他索引

我正在创建一个包含四列的 Innodb 表。

桌子

从逻辑的角度来看,A、B、C 列必须一起组成一个 PK。但是,为了提高性能并能够直接从索引中读取(使用索引),我正在考虑一个包含所有 4 列的 PK(A , B, C, D)。

问题

将附加列附加到 Innodb 表上的主键的性能是什么?

注意事项

  • 代理主键绝对不可能
  • 此表上不存在其他索引
  • 表是读/写密集型(两者大致相等)

谢谢!

0 投票
2 回答
419 浏览

mysql - 如何避免对带有 order by 语句的前缀查询的 mysql 复合索引进行文件排序?

我有一个 1 GB 的 mysql 表,其中包含三个列(德国二元组):

我还创建了一个复合索引:

另外我压缩了表格并使其只读并使用以下方法对索引进行排序:

现在我询问具有以下结构的查询:

  • 修复源
  • 为目标指定前缀
  • 按分数检索前 k 行

如下所示:

mysql explain 告诉我仍然使用文件排序!

我明白,如果我将查询更改为:

将没有文件排序,但错误的是涉及文件排序。

这个讨论中我意识到 desc 关键字是问题所在。所以我们不检查:

完美的工作。

但我想要对分数而不是目标进行降序排序。以这种方式创建索引

不是一个选项,因为目标过滤器将为文件排序产生然后或者如果不是,则如果前缀很长并且源是一个常用词,则需要遍历的元素的结果列表可能非常长。

我不知何故感觉没有明显的解决方案?

0 投票
1 回答
872 浏览

mysql - MySql 中的复合索引是否双向工作?

考虑具有以下架构的 MySql 表

现在我需要像这样的查询

并且

所以我正在考虑对 2 列进行复合索引,如下所示:

1)索引是根据需要创建的,但是当记录很多(〜百万)时它们会起作用吗?

2) 索引会在正确的时间使用正确的索引来加速查询吗?

PS:我不需要sort/range selection查询,只需要直接匹配查询。是否有更好的索引方案可用于此要求?

0 投票
1 回答
343 浏览

mysql - 复合属性索引

当我们在属性上创建索引时,会为此属性创建一棵树。
但是当我们创建一个具有复合属性的索引时会发生什么呢?创建了两棵树?两者都是同一棵树的一部分?什么?

0 投票
1 回答
178 浏览

mysql - 对使用索引时查看半百万行的 mysql 感到困惑

我有一个包含 300M 行(并且还在增长)的表(location_data)。

我想为 foo_id 的特定值找到最新条目 (MAX(id))的 id 。

  • 下面的查询是最优的吗?它通常需要几秒钟。
  • “rows”值 561826 是否意味着 MySQL 正在读取并扫描 foo_id 的所有行,尽管它应该能够使用复合索引立即跳转到 foo_id 的最后一个 id?
  • 为什么“keylen”4,当它由两个 32 位整数组成时?

最重要的是,我怎样才能加快这个查询?

0 投票
2 回答
300 浏览

mysql - 综合指数

我是 MySQL 新手,我需要在现有表(包含大约 200K 行)上添加索引。

我有 2 个查询需要从索引中受益:

和 :

我正在考虑引入多列索引(在 completed_time 和 deleted_time 上)但是,我不确定条件“s.completed_time is not null”是否符合使这些查询使用复合索引的条件。

  • 您对什么是最好的(复合索引或 2 个索引)有任何想法吗?我正在尝试使用“解释”来找出最好的方法,但我不确定如何解释结果。

  • 更一般地说:对于(column1,column2)上具有复合索引的表,我知道仅对column2进行过滤不会使用索引。但是,如果我在正确的情况下引入类似 (column1 > MIN_VALUE) 或 (column1 is not null) 的虚拟条件会怎样?

谢谢!

0 投票
1 回答
4229 浏览

mysql - 慢速 MySql 查询:检查和建议复合索引的工具

我有一个跨多个性能较差的表连接的查询,因此我使用试错技术来创建复合索引,以尝试根据我正在过滤的列改进性能,但我没有得到想要的结果。我正在使用 EXPLAIN 计划来尝试确定合适的索引策略。

任何人都可以建议另一种可以帮助解决此问题的工具吗?

0 投票
2 回答
49 浏览

mysql - MySql 复杂的连接性能问题

请考虑以下查询

要获取我需要的数据集,我需要过滤(注释掉的)CONTACTS client_id 以及 OUTBOUND_MESSAGES client_id,但这就是将性能从毫秒变为数十分钟的原因。

没有“ AND CON.MM_CLIENT_ID = 1 ”的执行计划:

“ AND CON.MM_CLIENT_ID = 1 ”的执行计划:

任何有关如何格式化上述内容以使其更容易阅读的建议都会很好。

ID 字段是主键。所有连接列都有索引。

0 投票
1 回答
589 浏览

sql - EF Migrations 在添加复合索引时删除索引

当我使用外键添加复合索引时,我注意到 EF 删除了外键上的索引。所以我需要更好地理解复合索引:)

我使用这个答案添加了复合索引并生成了我的 EF 代码第一个迁移文件。

添加复合索引:

迁移文件:

我不明白的是为什么它需要删除我的外键上的索引。据我所知,一个属性可以毫无问题地用于多个索引。那么它为什么会被丢弃呢?这不会使连接变慢吗?

模型:

映射:

0 投票
0 回答
62 浏览

sql-server - SQL Server 多索引解决方案?

假设我们有一个带有名称的Tournament表,该表的列是Id, Name, GameId, TypeId, cityId, Status, Format. 除了IdName列我想用这些列的所有组合搜索这个表,我的意思是我可以用GameId & StatusorTypeId & CityId & Status或搜索Status & Format

如您所见,所有搜索选项计数等于

所以这是我的问题,最好的索引方案是什么,为什么?我认为选项是,

  1. 每列的索引。
  2. 所有列的复合索引。

我知道复合索引确实比单索引快,但是如果你按照正确的顺序排列,我的意思是如果我在[GameId, TypeId, CityId, Status, Format]列上有一个复合索引并且搜索GameId = 1 & TypeId = 2 & CityId = 3 & Status = 5 & Format = 6它会很好用,但是如果我搜索GameId = 1 & Format = 6我无法意识到这个查询将如何工作足够快,据我所知,SQL Server 复合索引只是一个 b-tree,复合索引的 b-tree 键是从左到右列排序的。