Questions tagged «index»

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

1
相似度函数的最佳索引
因此,我的这张表有620万条记录,而且我必须对该列执行相似的搜索查询。查询可以是: SELECT "lca_test".* FROM "lca_test" WHERE (similarity(job_title, 'sales executive') > 0.6) AND worksite_city = 'los angeles' ORDER BY salary ASC LIMIT 50 OFFSET 0 可以在where中添加更多条件(年份= X,worksite_state = N,status =“已认证”,visa_class = Z)。 运行其中一些查询可能会花费很长时间,超过30秒。有时超过一分钟。 EXPLAIN ANALYZE 前面提到的查询给了我这个: Limit (cost=0.43..42523.04 rows=50 width=254) (actual time=9070.268..33487.734 rows=2 loops=1) -> Index Scan using index_lca_test_on_salary on lca_test …

3
加快Postgres部分索引的创建
我正在尝试在Postgres 9.4中为大型(1.2TB)静态表创建部分索引。 我的数据是完全静态的,因此我可以插入所有数据,然后创建所有索引。 在这个1.2TB的表中,我有一列名为run_id,它清楚地划分了数据。通过创建覆盖run_ids 范围的索引,我们获得了出色的性能。这是一个例子: CREATE INDEX perception_run_frame_idx_run_266_thru_270 ON run.perception (run_id, frame) WHERE run_id >= 266 AND run_id <= 270; 这些部分索引为我们提供了所需的查询速度。不幸的是,每个部分索引的创建大约需要70分钟。 看来我们受CPU限制(top正在显示该进程的100%)。 我有什么办法可以加快创建部分索引的速度? 系统规格: 18核至强 192GB内存 RAID中的12个SSD 自动真空关闭 maintenance_work_mem:64GB(太高了吗?) 表规格: 大小:1.26 TB 行数:105.37亿 典型索引大小:3.2GB(存在〜.5GB的差异) 表定义: CREATE TABLE run.perception( id bigint NOT NULL, run_id bigint NOT NULL, frame bigint NOT NULL, …

2
在一系列时间戳(一列)上优化查询
我正在通过Heroku使用Postgres 9.3。 我有一个表“ traffic”,其中有1M +条记录,每天都有许多插入和更新。我需要在此表上的不同时间范围内执行SUM操作,这些调用最多可能需要40秒钟,并且希望听到有关如何改进该建议的建议。 我在此表上有以下索引: CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner; 这是一个示例SELECT语句: SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions FROM "traffic" WHERE "uuid_self" != "uuid_partner" AND "campaign_id" is NULL AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000' AND "dt_created" <= …

1
结合全文本和标量索引
假设我们有一个1200万个名称和地址的数据库,这些数据库需要使用全文本进行搜索,但是每行也包含一个整数值,例如COMPANYID。该表在这1200万行中包含约250个不同的COMPANYID。 定义全文索引时,是否可以COMPANY在树中赋予每个索引自己的“分支”?

2
在PostgreSQL 8.4中重新索引之前,是否应该总是进行VACUUM ANALYZE?
每天清晨,一个pgAgent作业都会从我的PostgreSQL 8.4数据库中的表B中刷新表A的内容。表A在91列中包含约140k记录,并具有两个索引-一个作为PRIMARY KEY的一部分,另一个在POINT PostGIS几何列上的GIST索引。 为了使过程更快一些,作业将删除几何列上的索引,然后删除表A中的记录并从表B中插入记录,然后重新创建索引。autovacuum守护程序在感觉良好时就可以完成所有工作(大约在十分钟后,通过比较作业状态和表状态的作业完成时间和autovacuum运行时间)。 在所有这些都发生之后,今天早上检查表时,表统计信息告诉我表大小为272MB,TOAST表大小为8192bytes,索引大小为23MB。这似乎很大,所以我在表上发出了REINDEX命令,索引大小降至9832kB。 我的问题是这样的: 为什么当从头开始重新构建索引(或至少是几何列索引)时,REINDEX会明显减少索引的大小?我应该确定在建立索引之前已经对表进行了清理/分析吗?这不是在主键上删除索引的一个因素吗?我想念什么?

2
未使用但影响查询的索引
我有一个带有一些数字和一些其他数据的PostgreSQL 9.3表: CREATE TABLE mytable ( myid BIGINT, somedata BYTEA ) 该表当前有约10M条记录,并占用1GB磁盘空间。myid不连续。 我想计算100000个连续数字的每个块中有多少行: SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; 这将返回大约3500行。 我注意到,即使查询计划根本没有提及某个索引,该索引的存在也会显着加快此查询的速度。没有索引的查询计划: db=> EXPLAIN (ANALYZE TRUE, VERBOSE TRUE) SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------- GroupAggregate (cost=1636639.92..1709958.65 …

3
如何创建具有相同约束和索引的新表?
我正在创建一个具有主键约束和该表中的非聚集索引的新表。 我知道,我想创建另一个具有相同结构和值以及键和索引的表。 create table Dummy (id integer ,name varchar(20),salary integer Constraint PK_Con_id primary key(id)) insert into Dummy values(11,'AAA',1000); insert into Dummy values(12,'BBB',2000); insert into Dummy values(13,'CCC',3000); insert into Dummy values(14,'DDD',4000); select * from Dummy; create nonclustered index IX_Name on Dummy(Name) 现在,我正在创建Dmy表,但是“键和约束”未反映Dmy在SQL Server 2008 R2的表中。 SELECT * INTO Dmy FROM Dummy

1
为什么我创建的基于函数的索引会降低成本,但不会出现在解释计划明细表中?
抱歉,列/表的名称很糟糕,但是由于这是一个工作项目,因此我想确保可以问清楚。我只是希望至少了解为什么我没有看到我的功能索引被使用,所以我在生产环境中添加此索引感觉更好。 该查询使用的是我创建的视图,该视图具有许多不同的列,并带有执行以下操作的where子句: .... AND e.sysid = NVL(wi.ALPHAid, -999) AND NVL(wi.ALPHAid, -999) <> -999 AND NVL(wi.BRAVOid, -999) = -999 AND NVL(wi.CHARLIEid, -999) = -999 ... 据我了解,如果您通过函数传递列,而需要创建基于函数的索引,则Oracle无法使用索引。因此,在创建索引之前,我需要在解释计划中获得以下费用: 计划哈希值:1233409744 ------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | …
8 oracle  index  explain 


1
MySQL在巨大的表和简单的SELECT上需要FORCE INDEX
我们有一个应用程序,它将来自不同来源的文章存储在MySQL表中,并允许用户检索按日期排序的那些文章。文章始终按来源进行过滤,因此对于客户端SELECT,我们始终有 WHERE source_id IN (...,...) ORDER BY date DESC/ASC 我们正在使用IN,因为用户有很多订阅(有些订阅有数千个)。 这是articles表的架构: CREATE TABLE `articles` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `source_id` INTEGER(11) UNSIGNED NOT NULL, `date` DOUBLE(16,6) NOT NULL, PRIMARY KEY (`id`), KEY `source_id_date` (`source_id`, `date`), KEY `date` (`date`) )ENGINE=InnoDB AUTO_INCREMENT=1 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT=''; 我们需要(date)索引,因为有时我们在此表上运行后台操作,而没有按源进行过滤。但是,用户无法执行此操作。 该表有大约10亿条记录(是的,我们正在考虑分片以便将来...)。一个典型的查询如下所示: …


3
删除假设指数
过去,我以为我会使用针对集群索引的DROP INDEX语句和针对非集群索引的DROP STATISTICS语句删除假设索引。 我有一个数据库,其中充满了我想清除的DTA残留物;但是,当我尝试删除该对象时,总是收到一条错误消息,告诉我无法删除该对象,因为它不存在或您没有权限。我是服务器上的完整系统管理员,因此希望拥有执行任何操作的权利。 我已经尝试了DROP STATS和DROP INDEX语句,但是都给了我同样的错误。 有人删除过这些吗?我想念一个窍门吗? 附录 翻看一下,我只是注意到,如果我右击该对象,则“ Script As”和“ DELETE”选项均为灰色。

3
SQL Server中的聚集索引与Oracle中的索引组织表
作为数据库开发人员,我正在从SQL Server过渡到Oracle,并且已经在这里找到了一些很棒的资源(如何从SQL Server DBA过渡到Oracle?以及作为DBA,我将如何从Oracle过渡到SQL Server。 ?),但是我很难找到有关在Oracle中使用索引组织表的良好信息。 在我的前世中,我们在OLTP-ish数据集市中广泛使用了SQL Server中的聚集索引,并取得了巨大的成功。索引组织表是否可以方便地用作Oracle中的工具?

1
空间索引可以成为多列索引的一部分吗?
这里的手册非常不清楚,甚至没有提供一些示例SQL语句:http : //dev.mysql.com/doc/refman/5.6/en/column-indexes.html 重述该问题的另一种方法是: 我们知道我们可以有一个包含多列的索引。如果这些列的索引属于不同类型怎么办?说第一列是空间,另一列是fulltextsearch,等等。我们可以在mysql中这样做吗?(奖金:如果您碰巧知道,我们可以在mongodb中这样做) 假设您有一张myisam桌子 它具有包含点的LATLONG列 它具有FULLTEXT列,其中包含“业务”中的单词 您要先按LATLONG查询,然后在匹配的LATLONG中要基于FULLTEXT列进行过滤。 我想您将需要多列索引。 但是,SQL命令是什么? 众所周知,如果可能的话,mysql将始终首先使用fulltextsearch索引。 该查询: SELECT BusinessID as ID , 111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from tableauxiliary use index (LatLong_2) WHERE MBRContains( GeomFromText ( 'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)' ), Latlong)=1 AND Prominent >15 AND MATCH FullTextSearch AGAINST ('sea*' IN BOOLEAN MODE) ORDER BY Distance LIMIT …
8 mysql  index 

2
非聚集索引-键和非键
我只想确保我在这些概念上走的正确,所以任何反馈将不胜感激。 这是我根据刚刚经过优化的查询通过反复试验并阅读MSDN文档而得出的理论。 查询 DECLARE @pic_id int SET pic_id = 1 SELECT ROW_NUMBER() OVER (ORDER BY pic_date desc) AS row_num, * FROM tbl_pics WHERE deleted = 0 AND map_id = 1 AND (hidden = 0 OR pic_id = @pic_id) 索引 CREATE NONCLUSTERED INDEX [IX_tbl_pics] ON [dbo].[tbl_pics] ( [map_id] ASC, [deleted] ASC, …

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.