Questions tagged «index»

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

3
过滤按行版本排序的数据
我有一个具有以下结构的SQL数据表: CREATE TABLE Data( Id uniqueidentifier NOT NULL, Date datetime NOT NULL, Value decimal(20, 10) NULL, RV timestamp NOT NULL, CONSTRAINT PK_Data PRIMARY KEY CLUSTERED (Id, Date) ) 不同的Id的数量在3000到50000之间。 表的大小变化到十亿行以上。 一个ID最多可以覆盖表格的5%至几行。 此表上最常执行的查询是: SELECT Id, Date, Value, RV FROM Data WHERE Id = @Id AND Date Between @StartDate AND @StopDate 我现在必须在ID的一个子集上实现增量数据检索,包括更新。 …


3
在asc和desc方向上创建索引
在过去的几周中,我一直在使用旧的Firebird数据库。由于种种原因,该数据库很糟糕,但是我注意到的一件事是,每个表的每个字段都有两个索引。每个都有一个段,一个按asc顺序,一个按desc顺序。 除了为每个表中的每个字段都具有索引的复杂性之外,我还想过-对于单段索引,具有两个具有相同索引段但一个进desc一出的索引是否有优势asc?有什么要收获的,还是现代的DBMS会简单地使用asc索引并从头开始,然后根据需要向后移动?
8 index  firebird 

2
如何使联合视图更有效地执行?
我有一个大表(上千万个记录),出于性能原因,我们将其拆分为活动表和存档表,使用直接字段映射,并每晚运行一个存档过程。 在代码的几个地方,我们需要运行结合了活动表和归档表的查询,这些查询几乎总是被一个或多个字段过滤(我们显然已经在两个表中都添加了索引)。为了方便起见,有如下视图是有意义的: create view vMyTable_Combined as select * from MyTable_Active union all select * from MyTable_Archive 但是如果我运行类似的查询 select * from vMyTable_Combined where IndexedField = @val 在使用过滤之前,它将对Active和Store中的所有内容进行合并@val,这会降低性能。 是否有任何巧妙的方法可以使并集的两个子查询@val在创建并集之前查看每个过滤器? 或者,也许您会建议采用其他方法来实现我的目标,即一种简单有效的方法来获取由索引字段过滤的联合记录集? 编辑:这是执行计划(您将在这里看到实际的表名): 奇怪的是,活动表实际上使用了正确的索引(加上RID查找?),但是归档表正在执行表扫描!

2
如何在MongoDB中索引动态属性
我在MongoDB中有以下类型的数据(与我的实际情况相比有所简化): { "name":"some name", "attrs":[ {"n":"subject","v":"Some subject"}, {"n":"description","v":"Some great description"}, {"n":"comments","v":"Comments are here!"}, ] } attrs数组是动态属性的容器,即我事先不知道将哪种类型的属性放在那里。n代表名称,v代表价值。 《 MongoDB In Action》一书将其描述为在属性完全可上调的情况下具有动态属性的解决方案。它还描述了您可以像这样对它建立索引: db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1}) 然后可以这样查询: db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "Some subject"}}}) 当我对此进行测试时,我会得到非常差的性能。我用mycollection测试了200万个文档,但没有索引似乎表现更好。 那么,问题来了,有没有一种方法可以对这种动态属性设置建立索引,从而使索引具有良好的性能?就我而言,仅具有“主题”和“描述”之类的键并对其全部建立索引是不可行的...
8 index  mongodb 

1
MySQL是否仍以这种方式处理索引?
在MySQL中删除重复索引需要花费相当长的时间,因此在等待期间,我进行了搜索并找到了2006年以来的这篇文章,谈论MySQL如何处理ADD和建立DROP索引。 如果表T是具有四个索引(ndx1,ndx2,ndx3,ndx4)的MySQL表,并且您想“更改表T的删除索引ndx3;” 这正是幕后发生的事情: 1)MySQL将T.MYD复制到临时表,即S.MYD和零字节的S.MYI。2)MySQL确实在表S上添加了索引ndx1(...);3)MySQL确实在表S上添加了索引ndx2(...);4)MySQL确实在表S上添加了索引ndx4(...);5)MySQL删除T.MYD并删除T.MYI 6)MySQL将S.MYD重命名为T.MYD,并将S.MYI重命名为T.MYI 这仍然是真的吗?他的建议仍然有效吗? 给定具有四个索引(ndx1,ndx2,ndx3,ndx4)的同一MyISAM表T,并且您要“更改表T的删除索引ndx3;” 试试这个代替: 1)创建像T一样的表T1;这将创建一个具有索引ndx1,ndx2,ndx3和ndx4的空表T1。2)alter table T1丢弃索引ndx3; 这会将索引ndx3丢弃在空T1上,该索引应该是瞬时的。3)插入T1中,从T中选择*;这将填充表T并一次性加载T1的所有三(3)个索引。4)放表T表;5)将alter table T1重命名为T; 大家如何处理大表中的索引添加和删除?

1
SQL Server中的B树节点拆分策略可单调增加价值
考虑一个将始终单调增加的值的B树索引,例如IDENTITY类型的列。使用传统的B树实现,每当一个节点满时,它将被拆分50%/ 50%,最后我们得到一个B树,其中几乎所有节点都只有50%满。 我知道Oracle发现何时值会不断增加,在这种情况下,Oracle会执行90%/ 10%的拆分。这样,(几乎)所有节点都将充满90%的数据,对于这些非常常见的情况,页面利用率要高得多。 我无法在SQL Server中找到类似功能的文档。但是,我进行了两个实验,分别在索引中插入了N个随机整数和N个连续整数。前一种情况使用了更多的页面,而后者则使用了更多页面。 SQL Server是否提供类似的功能?如果是这样:您能指出我一些有关此功能的文档吗? 更新: 通过下面提供的实验,叶节点似乎保持未分裂状态,内部节点分裂了50%/ 50%。这使得递增键上的B树比随机键上的树更紧凑。但是,Oracle提出的90%/ 10%的方法甚至更好,我仍然在寻找一些官方文档来验证实验中看到的行为。
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.