问题标签 [database-indexes]

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 投票
3 回答
211 浏览

database - 数据库设计问题 - 哪个是最好的解决方案?

我正在使用 Firebird 2.1,我正在寻找解决此问题的最佳方法。

我正在编写一个日历应用程序。不同用户的日历条目存储在一个大日历表中。每个日历条目都可以有一个提醒集——只有一个提醒/条目。

从统计上看,随着时间的推移,日历表可能会增长到数十万条记录,而提醒会少得多。

我需要不断地查询提醒。

哪个是最好的选择?

A)将提醒信息存储在日历表中(在这种情况下,我将查询数十万条 IsReminder = 1 的记录)

B)创建一个单独的 Reminders 表,其中仅包含设置了提醒的日历条目的 ID,然后使用 JOIN 操作查询这两个表(或者可能在它们上创建一个视图)

C) 我可以在 Reminders 表中存储所有关于提醒的信息,然后只查询这个表。缺点是需要在两个表中复制一些信息,例如为了显示提醒,我需要知道事件的开始时间并将其存储在提醒表中 - 因此我要维护两个具有相同值的表。

你怎么看?

还有一个问题:Calendar 表将包含多个用户的日历,仅由 UserID 字段分隔。由于只能有4-5个用户,即使我在这个字段上放了一个索引,它的选择性也会很差——这对于一个有几十万条记录的表来说是不好的。这里有解决方法吗?

谢谢!

0 投票
2 回答
75 浏览

php - 可能对 MySQL 进行混合覆盖/追加批量写入?

我正在为我的客户设置一个上传器(使用 php),他们可以在他们的机器上选择一个 CSV(以预先确定的格式)进行上传。CSV 可能有 4000-5000 行。Php 将通过读取 CSV 的每一行并将其直接插入 DB 表来处理文件。那部分很容易。

但是,理想情况下,在将此数据附加到数据库表之前,我想查看 3 个列(A、B 和 C)并检查表中是否已经有这 3 个字段的匹配组合和 IF所以我宁愿更新该行而不是追加。如果我没有这 3 列的匹配组合,我想继续插入行,将数据附加到表中。

我的第一个想法是我可以将 A、B 和 C 列设为表中的唯一索引,然后插入每一行,以某种方式检测“失败”插入(由于我的唯一索引的限制),然后进行更新. 似乎这种方法比必须为每一行进行单独的 SELECT 查询以查看我的表中是否已经有匹配的组合更有效。

第三种方法可能是简单地附加所有内容,不使用 MySQL 唯一索引,然后仅在客户端稍后查询该表时获取最新的唯一组合。但是,我试图避免该表中有大量无用的数据。

关于最佳实践或聪明方法的想法?

0 投票
2 回答
10195 浏览

mysql - 为什么 MySQL 会使用索引交集而不是组合索引?

我不时遇到奇怪的 MySQL 行为。假设我有索引(type、rel、created)、(type)、(rel)。像这样的查询的最佳选择:

将使用 index (type, rel, created)。但是 MySQL 决定与索引(type)和相交(rel),这会导致性能变差。这是一个例子:

和相同的查询,但添加了一个提示:

我认为 MySQL 采用 EXPLAIN 命令的“行”列中包含较少数字的执行计划。从这个角度来看,与 4343 行的索引交集看起来比使用我的 8906 行的组合索引更好。那么,也许问题出在这些数字之内?

由此我可以得出结论,MySQL 在计算组合索引的近似行数时是错误的。

那么,在这里我能做些什么来让 MySQL 采取正确的执行计划呢?

我不能使用优化器提示,因为我必须坚持使用 Django ORM 我找到的唯一解决方案是删除那些单字段索引。

MySQL 版本是 5.1.49。

表结构为:

0 投票
1 回答
1978 浏览

mysql - MYSQL 可以为 WHERE ... IN 查询使用索引吗?

我们目前在我们的应用中有这样的查询:

我们在 上添加一category_idcombos,查询将变为:

目前,有一个关于 的索引combos(text)。我们正在考虑移除它并安装一个combos(category_id, text)。MYSQL 是否能够像使用旧索引一样使用新索引?如果答案是“取决于”,它取决于什么?我们应该保留旧的以防万一吗?

0 投票
3 回答
221 浏览

mysql - 像 '%%' 这样的列名和根本没有条件之间有区别吗?

这两个查询有区别吗(优化方面)?

我正在使用传递的参数在 PHP 中动态构建查询。所以,例如..

我问这个的原因是因为我读到mysql在进行选择时只使用一个索引。因此,如果我对名字和姓氏有单独的索引,则只会使用一个。如果我的查询为:

默认情况下,我可以在 first_name 和 last_name 上添加连接索引,搜索会更快吗?

0 投票
1 回答
739 浏览

ruby-on-rails - 我应该在 Ruby on Rails 3.0 中的计数器缓存列上添加索引吗

环境:Rails 3.0.4、MySQL、Ruby 1.8.7

我有下表:

我经常搜索拥有超过 n 个用户的国家。向计数器缓存“users_count”添加索引是否有意义?

我意识到它会为每个添加的用户增加一点开销,但我想确保在计数器缓存的机制中没有其他我遗漏的东西,

0 投票
1 回答
97 浏览

database - sqlite 如何存储其内容

根据我的谷歌,sqlite 不支持聚集索引(参见四:聚集索引),但我不明白的是:

这意味着如果您的索引是顺序 INTEGER,则记录按 INTEGER 顺序物理布局在数据库中,1 然后 2 然后 3。

  1. 如果从包含顺序 int 索引的表中删除了一些记录,那么新插入的记录应该放在哪里?据我所知,记录 int ID 只会增长,所以记录会附加到尾部,对吗?这是否意味着删除的地方被浪费了?
  2. 在没有顺序INTEGER索引的情况下,sqlite表是堆表吗?即记录将放置在第一次找到可用空间的位置。
0 投票
1 回答
212 浏览

mysql - 我可以创建一个没有 PK 的 InnoDB 表吗?如果是这样,二级索引会用作聚集索引吗?

是否可以创建没有主键的 InnoDB 表?

由于 InnoDB 表的结构是围绕 PK 的聚集索引,那么没有 PK 的表的结构是什么?该表是否仍然是聚集索引,但围绕辅助键?

谢谢。

0 投票
2 回答
5464 浏览

database - 单列/多列索引,哪个更好?

我有一个执行不佳的过程,其中有几个查询。

我已经确定了一些临时表查询来扫描临时表。我决定在临时表上添加索引以避免表扫描。我注意到在 where 子句中使用了多个临时表列。但是,我不确定是否应该将所有列包含在单个索引(复合索引)或多个索引中,每个索引一列以获得最大性能。

数据库是 DB2

0 投票
1 回答
1923 浏览

ruby - Rails - :id 属性所需的数据库索引?

因此,当我关注 Michael Hartl 的 Ruby on Rails 教程时,我注意到在 users 表中我们为:email属性添加了唯一索引以提高find方法的效率,因此它不会逐行搜索。到目前为止,我们一直在根据具体情况使用这两种方法find_by_email进行搜索。然而,我们从未为属性find_by_id设置索引 。:id是否:id自动索引,因为它在默认情况下是唯一且连续的?或者不是这种情况,我应该添加一个:id搜索索引吗?