Questions tagged «index»

一种数据库结构,可以以磁盘空间为代价提高查询速度,并降低插入/更新的速度。它存储一个或多个排序的列的副本,但以不同的方式构造数据以允许更快地访问。

1
缺少的非聚集索引已成为聚集索引的一部分
我正在调试运行缓慢的查询,在执行计划中建议使用51.6648 Impact的非聚集索引。但是,非聚集索引仅包括主键(PK)复合聚集索引中已经存在的列。 难道是因为索引中列的顺序?即,如果聚集索引中的列从最有选择性到最少的顺序不顺序,那么非聚集索引是否有可能提高性能? 此外,非聚集索引仅包含三个PK列中的两个,而第三个添加为包含列。include使用非聚集索引可能会更优化的另一个原因吗? 以下是我正在使用的表结构的示例: 桌子- Retailers ( RetailerID int PK, name ...) Retailer_Relation_Types ( RelationType smallint PK, Description nvarchar(50) ...) Retailer_Relations ( RetailerID int PK FK, RelatedRetailerID int PK FK, RelationType smallint PK FK, CreatedOn datetime ...) 该表Retailer_Relations具有以下综合PK指数和建议指数- CONSTRAINT PK_Retailer_Relations PRIMARY KEY CLUSTERED ( RetailerID ASC, RelatedRetailerID ASC, RelationType …

3
非聚集索引是否对行顺序有任何保证?
我有一个开发人员希望在不按顺序执行select语句时,将表中的行按插入的顺序排列。开发人员建议从聚簇索引更改为非聚簇索引。 通过将索引从聚集索引更改为非聚集索引,这是否可以保证表中行的出现顺序? 这个问题主要是出于我的好奇心。我将建议改用Identity列,但是这个请求让我开始思考。可以使用时间戳,但是有可能同时插入行。 在此先感谢您的帮助。

1
COALESCE现在可燃了吗?
我的一位开发人员争辩说COALESCE(column, default value) = default value现在可以精打细算了。那正确吗? 我进行了以下测试,并认为这暗示着COALESCE不可持久。 USE tempdb; SELECT @@VERSION; -- Microsoft SQL Server 2016 (RTM-CU3-GDR) (KB3194717) - 13.0.2186.6 (X64) Oct 31 2016 18:27:32 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 14393: ) (Hypervisor) CREATE TABLE Test ( ID int primary key …

2
自定义涉及数组的jsonb键排序顺序
我在PostgreSQL中有一张表,里面有一些数据: create table t2 ( key jsonb, value jsonb ); INSERT INTO t2(key, value) VALUES ('1', '"test 1"') ,('2', '"test 2"') ,('3', '"test 3"') ,('[]', '"test 4"') ,('[1]', '"test 5"') ,('[2]', '"test 6"') ,('[3]', '"test 7"') ,('[1, 2]', '"test 8"') ,('[1, 2, 3]', '"test 9"') ,('[1, 3]', '"test 10"') ,('[1,2,4]', …

3
执行计划未使用INDEX,而是使用表扫描
我知道使用索引或表扫描时,SQL Server使用统计信息来查看哪个更好。 我有一个2000万行的表。我在(SnapshotKey,Measure)上有一个索引,并且此查询: select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by Measure, SnapshotKey, MeasureBand 查询返回500k行。因此,查询仅选择表的2.5%的行。 问题是为什么SQL Server不使用我拥有的非聚集索引,而是使用表扫描? 统计信息已更新。 值得一提的是查询性能还是不错的。 表扫描 强制索引 表/索引结构 CREATE TABLE [t1]( [SnapshotKey] [int] NOT NULL, [SnapshotDt] [date] NOT NULL, [Measure] [nvarchar](30) NOT NULL, [MeasureBand] [nvarchar](30) NOT NULL, -- and many more fields …

5
进行扫描,尽管我希望进行搜索
我需要优化一条SELECT语句,但是SQL Server总是执行索引扫描而不是查找。这是查询,它当然在存储过程中: CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR [Status] = @Status) AND ( @IsUserGotAnActiveDirectoryUser IS NULL OR ( @IsUserGotAnActiveDirectoryUser IS NOT NULL AND ( @IsUserGotAnActiveDirectoryUser = …

1
如何回收由部分构建并因断电而终止的索引占用的空间
我正在Mac(10.10.4)上运行Postgres(postgis)9.4.2。 我有几个大桌子(几个TB)。 在其中一个索引建立大约一个星期的过程中,我看到了可用的HD空间下降,正如您所期望的那样,当断电持续时间比电池单元和系统更长时,索引将接近完成索引的时间点下去了。fillfactor=100由于它是静态数据源,因此在构建过程中需要缓冲。重新启动后,驱动器上剩余的可用空间恰好接近索引构建即将结束时的位置。真空分析无法释放空间。 我试着放下桌子并重新吃东西,但并没有减少空间。现在,我在一个没有足够空间来建立索引的地方。 索引构建期间生成的文件是否卡在某个状态中,由于机器在断电期间停机而无法被系统删除? 当我查看db中的表大小+索引(这是该驱动器上的唯一数据)时,它们的总和约为6TB。该驱动器为8TB,而驱动器上剩余的空间不足500GB,因此似乎某个地方丢失了约1.5TB的数据,其大小与索引的大小差不多。 有任何想法吗?

3
Postgres正在执行顺序扫描而不是索引扫描
我有一个表,其中包含约1000万行,并且在日期字段上有一个索引。当我尝试提取索引字段的唯一值时,即使结果集只有26个项目,Postgres也会运行顺序扫描。为什么优化师会选择此计划?而我该如何避免呢? 从其他答案中,我怀疑这与查询和索引都息息相关。 explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) 表结构: http=# \d pages Table "public.pages" Column | Type | Modifiers -----------------+------------------------+---------------------------------- pageid | integer | not null default nextval('... …

2
MySQL:delete…where..in()vs delete..from..join,并使用subselect锁定删除表
免责声明:请原谅我缺乏数据库内部知识。它去了: 我们运行的应用程序(不是我们编写的)在数据库的定期清理作业中存在很大的性能问题。查询如下所示: delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); 直截了当,易于阅读和标准SQL。但不幸的是非常缓慢。对查询进行解释说明VARIABLE_SUBSTITUTION.BUILDRESULTSUMMARY_ID未使用现有索引on : mysql> explain delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( -> select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY -> where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); | id | select_type | table | type | possible_keys | key …


2
多行插入与多个单行插入
在我的应用程序中,我会尽可能执行多行插入操作,因为这会减少数据库与应用程序之间的往返次数。 但是,我很好奇,还有其他优势吗?例如,如果像这样一次插入多行: insert into tbl (c1, c2) values (v1, v2) (v3, v4) 与: insert into tbl (c1, c2) values (v1, v2) insert into tbl (c1, c2) values (v3, v4) 并且该表具有索引,在第一种情况下该索引是计算一次,在第二种情况下是两次计算?还是每次插入总是一次?假定两个查询都在同一事务中。 我正在使用PostgreSQL。

1
建议使用STATISTICS_NORECOMPUTE
我最近参与了维护一组具有一些有趣的索引问题的数据库。使我最恼火的因素之一是开发,测试,模型和生产机器之间的指标差异。由于差异使调整查询变得相当困难,因此将它们同步起来是我的第一个项目。 在比较测试和模型环境时,我注意到模型环境中的大多数索引都STATISTICS_NORECOMPUTE设置为,ON而测试中的索引没有设置。在所有环境中,每天都有一项工作来更新所有数据库的统计信息。 我从来没有处理过STATISTICS_NORECOMPUTE,所以这是我的问题。处理此设置时是否有最佳做法?如果我要在一天结束时进行统计信息更新,最好打开STATISTICS_NORECOMPUTE所有环境中的所有索引吗?还是有充分的理由不这样做? 编辑:我发现了金佰利特里普的关于这一主题的博客之一在这里,似乎表明STATISTICS_NORECOMPUTE应谨慎充其量只能使用。但是我仍然担心在全球范围内将其关闭。有没有人尝试过,他们经历了什么?

1
提高SQL Server上索引重建的速度
我正在将大量数据导入到一个空数据库中,在开始之前,我禁用了所有非唯一的非聚集索引,以查看是否可以改善导入性能。 现在我想重新启用索引,我想知道是否有什么我可以做的来优化它。 有超过100个表和将近2,000个索引要重建。该数据库的大小为200GB。 我正在运行的脚本的关键部分是: declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild' from sys.indexes as i Inner Join sys.objects o On o.object_id = i.object_id Where o.is_ms_shipped = 0 And i.index_id >= 1 and i.type > 1 and …

1
PostgreSQL如何物理排序磁盘上的新记录(在主键上的集群之后)?
需要知道PostgreSQL如何排序磁盘上的记录。在这种情况下,我想利用docs中所述的索引组合,据我所知,它使用位图来获取匹配的行并根据其物理位置返回它们。该表已通过其主键进行了聚类。 据我了解,PostgreSQL在聚类完成后不会自动继续进行聚类(尽管它确实记得它是根据某个索引进行聚类的)。现在,由于这是主键,所以我想知道物理存储顺序是否符合该顺序(如果为true,我想利用它来进行特定查询)。 总之,PostgreSQL如何排序其新记录,尤其是在集群之后? 非常感谢!

1
有什么理由对很小的表(最多1000行)使用索引吗?
在应用程序开发期间,我有很多表存储“少量”的数据(通常为10-40值,有时是id+ ),其中包含“对象”的属性,例如产品的新鲜/腐烂,红色/绿色/蓝色。valuetype 我不将此属性归因于产品表,因为电子组件不能新鲜,氧气不能变为红色,并且表不能具有无限的行数... 为了存储属性,我使用了2-3个字段的自定义小表:id用于链接,name用于在应用程序中显示以及有时type属性分组在同一类别中。 主要的“对象”通过中间的多对多表链接到属性。 是否有任何理由为少于1000个项目(通常为10至40个)的“小词典”创建和维护索引? 我的目标数据库是Oracle,但我希望回答独立于供应商的问题。 我填写-不,但是没有技术技能可以证明我的填写是正确的...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.