问题标签 [indexing]
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.
sql - 按唯一字段搜索时使用 LIMIT
给定这样的表结构:
通过用户名搜索时使用 LIMIT 关键字有什么用,还是数据库足够聪明,知道可能只有一个结果,因此一旦找到就停止搜索?
更新:感谢您的回答,他们一直很有启发性。看起来,即使没有必要,LIMIT 1
进行查询也不会受到伤害,并且可能会增加可读性(您不必查看数据库模式就知道只会返回一个)。特别为 JR 的回答大喊大叫——我什至不知道你可以用索引来做到这一点。
另外,我在这里找到了一个类似的问题,这也可能有所帮助。
sql - 如何在 NULL 列上创建唯一索引?
我正在使用 SQL Server 2005。我想将列中的值限制为唯一,同时允许 NULL。
我当前的解决方案涉及一个视图上的唯一索引,如下所示:
有更好的想法吗?
sql - 在 postgres 中复制表(包括索引)
我有一个 postgres 表。我需要从中删除一些数据。我打算创建一个临时表,复制数据,重新创建索引并删除我需要的行。我不能从原始表中删除数据,因为这个原始表是数据的来源。在一种情况下,我需要获得一些取决于删除 X 的结果,在另一种情况下,我需要删除 Y。所以我需要所有原始数据始终存在并且可用。
但是,重新创建表并再次复制并重新创建索引似乎有点愚蠢。无论如何在 postgres 中告诉它“我想要这个表的完整单独副本,包括结构、数据和索引”?
不幸的是,PostgreSQL 没有“CREATE TABLE .. LIKE X INCLUDING INDEXES”
grails - grails 索引页面的最佳实践
在 grails 应用程序中为索引页面填充模型的正确方法是什么?默认情况下没有 IndexController,是否有一些其他机制可以将这个和那个列表放入模型中?
sql - 单个索引与多个字段索引
目前,我们有一个用于跟踪邀请的表。我们有一个已编入索引的电子邮件字段,但我们还有三个可选键,用户可以在添加新记录电子邮件时指定它们。我们不允许重复,因此我们必须查询电子邮件和可选键是否已经存在。目前,如果指定了键,则仅将键添加到 select 语句中。正常情况是仅指定电子邮件并使用索引它工作得相当快。添加键时性能下降。
添加三个索引会影响其他操作的性能吗?密钥可能很少使用,我们不想影响这种情况下的性能。
- 电子邮件,key1
- 电子邮件,key1,key2
- 电子邮件,key1,key2,key3
另一个想法是我们添加 1 个密钥。
- 电子邮件,key1,key2,key3
然后始终在查找中使用所有 3 个键(例如 key1 = mykey AND key2 为 NULL AND key3 为 NULL)
也可以看看
oracle - 如何选择和优化oracle索引?
我想知道是否有创建索引的一般规则。如何选择应该包含在此索引中的字段或何时不包含它们?
我知道它总是取决于环境和数据量,但我想知道我们是否可以制定一些全球公认的关于在 Oracle 中创建索引的规则。
sql-server - 在 SQL Server 中将唯一索引创建为“索引”或“约束”有什么区别?
在将要成为 UNIQUE(但不是表的主键)的列上创建索引时,SQL Server 让我选择几个选项:
1)我可以选择它是一个约束或索引。
我猜这意味着如果我将它设置为约束,它不会在查询时使用它,只有在写入时。但是,我能想到的让 SQL Server 强制执行该约束的唯一有效方法是实际构建索引。这个选项有什么用?
2)另外,如果我将它设置为“索引”,它让我指定它应该忽略重复的键。这对我来说是最令人费解的......
我再次猜测它意味着与约束相反。它可能意味着“在查询时使用它,但在写入时甚至不检查”。
但那我为什么要把它设置为 UNIQUE 呢?
我猜 SQL Server 可以做一些优化,但我想更好地理解它。
有谁知道 SQL Server 究竟对这些选项做了什么?
将索引设置为唯一但忽略重复键的用例是什么?
注意:这适用于 SQL Server 2000
编辑:根据你所说的,但是......如果我创建一个约束,它将用于加速使用约束中的字段进行过滤的查询?
谢谢!
sql-server - 导入新的数据库表
我所在的地方有一个运行在大型 AIX 大型机上的主系统。为了方便报告和操作,每晚都会从大型机转储到 SQL Server,这样我们的 50 多个客户端中的每一个都在具有相同架构的自己的数据库中。这个转储每晚大约需要 7 个小时才能完成,而且我们真的无能为力:我们被应用程序供应商提供的东西所困扰。
转储到 sql server 后,我们使用它来运行许多其他日常程序。其中一个过程是将数据导入一种管理报告沙箱表,该表将来自不同数据库的一个特别重要的表中的记录组合到一个表中,不了解 sql 的管理人员可以使用该表来运行临时报告无需冲洗系统的其余部分。这又是一个商业问题:经理们想要它,他们有权看到我们实施它。
此表的导入过程本身需要几个小时。它将分布在 50 个数据库中的大约 4000 万条记录过滤成大约 400 万条记录,然后在某些列上对它们进行索引以进行搜索。即使在几个小时内,它仍然不到初始负载的三分之一,但是我们已经没有时间进行夜间处理了,我们无法控制大型机转储,我们可以控制它。所以我的任务是寻找改进现有程序的方法。
目前,理念是从每个客户端数据库加载所有数据,然后一步索引它会更快。此外,为了避免在运行时间过长时使其他重要系统陷入困境,一些较大的客户端被设置为始终首先运行(表上的主索引由 clientid 字段组成)。我们开始做的另一件事是一次从几个客户端并行加载数据,而不是顺序加载每个客户端。
所以我的问题是,加载此表的最有效方法是什么?我们是否认为稍后索引更好?还是我们应该在导入数据之前创建索引?我们是否应该按索引顺序加载表,以避免大量重新排序页面,而不是首先加载大客户?并行加载是否会因为一次导致大量磁盘访问或消除我们控制顺序的能力而使事情变得更糟?还有其他想法吗?
更新
嗯,有事。白天我可以做一些基准测试,无论是在操作开始时创建索引还是在操作结束时创建索引,加载时间都没有区别,但是我们节省了构建索引本身的时间(它的课程几乎立即构建,表中没有数据)。
mysql - 如何在两个字段上创建“双面”唯一索引?
如何有效地在表中的两个字段上创建唯一索引,如下所示: create table t (a integer, b integer);
其中两个不同数字的任何唯一组合不能在表的同一行上出现多次。
换句话说,如果存在 a=1 和 b=2 的行,则不能存在 a=2 和 b=1 或 a=1 和 b=2 的另一行。换句话说,两个数字不能以任何顺序一起出现多次。
我不知道这样的约束被称为什么,因此标题中的“双面唯一索引”名称。
更新:如果我在列 (a,b) 上有一个复合键,并且数据库中存在一行 (1,2),则可以插入另一行 (2,1) 而不会出错。我正在寻找的是一种防止同一对数字以任何顺序多次使用的方法......
sql-server - 是否有一个干净的 T-SQL 查询可用于验证索引是否具有正确的列?
我正在编写一个数据库升级脚本,它将检查索引是否定义了正确的两列。如果没有,或者只有其中一个,那么我将删除它(有没有办法改变索引?)然后用两者重新创建它。