Questions tagged «index»

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

2
了解“位图堆扫描”和“位图索引扫描”
我将通过以下示例来解释我的误解。 我不明白基本面的Bitmap Heap Scan Node。考虑查询SELECT customerid, username FROM customers WHERE customerid < 1000 AND username <'user100';的计划是这样的: Bitmap Heap Scan on customers (cost=25.76..61.62 rows=10 width=13) (actual time=0.077..0.077 rows=2 loops=1) Recheck Cond: (((username)::text < 'user100'::text) AND (customerid < 1000)) -> BitmapAnd (cost=25.76..25.76 rows=10 width=0) (actual time=0.073..0.073 rows=0 loops=1) -> Bitmap Index Scan …
36 postgresql  index 



3
MD5字段的最佳数据类型是什么?
我们正在设计一个读取量很大的系统(每分钟读取数万次)。 有一个表names,可以作为一种中央注册表。每行都有一个text字段representation和一个唯一字段,该字段key是该字段的MD5哈希值representation。1该表当前具有数千万条记录,并且预计在应用程序的生命周期内将增长到数十亿条。 还有许多其他表(具有高度变化的模式和记录计数)引用该names表。这些表之一中的任何给定记录都保证有一个name_key,从功能上讲,该names表是该表的外键。 1:顺便说一句,正如您所料,此表中的记录一旦写入便是不可变的。 对于除表以外的任何给定表names,最常见的查询将遵循以下模式: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); 我想针对读取性能进行优化。我怀疑我的第一站应该是最小化索引的大小(尽管我不介意在那里被证明是错误的)。 问题:和列 的最佳数据类型是什么? 有没有理由使用过?还是?keyname_keyhex(32)bit(128)BTREEGIN

2
按列排序应该有索引吗?
我在表中添加了用于搜索结果的索引。我按ASC或DESC顺序显示结果。所以那列应该有索引吗?我在那张桌子上还有2个索引。对该列建立索引或不建立索引会对性能产生怎样的影响?

2
索引不能使执行速度更快,并且在某些情况下会降低查询速度。为什么会这样呢?
我正在尝试使用索引来加快处理速度,但是在进行联接的情况下,索引并不能改善查询的执行时间,在某些情况下,它会降低处理速度。 创建测试表并填充数据的查询为: CREATE TABLE [dbo].[IndexTestTable]( [id] [int] IDENTITY(1,1) PRIMARY KEY, [Name] [nvarchar](20) NULL, [val1] [bigint] NULL, [val2] [bigint] NULL) DECLARE @counter INT; SET @counter = 1; WHILE @counter < 500000 BEGIN INSERT INTO IndexTestTable ( -- id -- this column value is auto-generated NAME, val1, val2 ) VALUES ( 'Name' …
34 sql-server  index 

7
复制表格的完整结构
使用某些方法,当您创建表的副本时,会丢失索引,PK,FK等。例如,在SQL Server中,我可以说: select * into dbo.table2 from dbo.table1; 这只是表的简单副本;缺少所有索引/约束。如何复制表结构(不使用备份)? 我主要是希望手动执行此操作,但是如果不可能,我将接受任何解决方案。


3
索引VARCHAR列是一个好主意/方法吗?
我们正在使用PostgreSQL v8.2.3。 有涉及的表:EMPLOYEE和EMAILLIST。 Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6) Table 2: EMAILLIST (email) 2个表以这种方式连接,如果EMPLOYEE.EMAIL1或EMPLOYEE.EMAIL2没有匹配的条目,则将返回这些行。 SELECT employee.email1, employee.email2, e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched FROM employee LEFT JOIN emaillist e1 ON e1.email = employee.email1 LEFT JOIN emaillist e2 ON e2.email = employee.email2 …

2
多列索引和性能
我有一个带有多列索引的表,并且我对正确排序索引以在查询中获得最大性能存有疑问。 场景: PostgreSQL 8.4,具有约一百万行的表 c1列中的值可以有大约100个不同的值。我们可以假设这些值是均匀分布的,因此每个可能的值都有大约10000行。 列c2可以具有1000个不同的值。每个可能的值都有1000行。 搜索数据时,条件始终包含这两列的值,因此该表具有包含c1和c2的多列索引。如果您仅使用一列进行过滤的查询,我已经读到了正确排序多列索引中的列的重要性。在我们的方案中情况并非如此。 我的问题是这个: 考虑到一个过滤器选择的数据要少得多的事实,如果第一个索引的选择性最强(允许使用较小的数据集),我是否可以提高性能?在看到引用的文章中的图形之前,我从未考虑过这个问题: 引用的文章中有关多列索引的图像。 查询使用两列中的值进行过滤。我没有只使用一列进行过滤的查询。它们都是:WHERE c1=@ParameterA AND c2=@ParameterB。也有类似这样的条件:WHERE c1 = "abc" AND c2 LIKE "ab%"

1
需要外键索引
我在索引,主键和外键上苦苦挣扎,而且都需要全部使用。 如果我有两个表,它们两个都有一个整数作为主键。 第一个表通过FK引用第二个表的主键。 在两个表上,我在ID列上都有一个主键索引 我在table1.ref_field参照第二张表格(table2.id)的PK时创建了FK约束 我在上添加了一个索引 table1.ref_field 这是组织这些索引(主键和外键)的最佳方法吗?

1
当所有值均为36个字符时,使用char vs varchar可使索引查找明显更快
我有一个旧式架构(免责声明!),它对所有表(有很多)的主键使用基于哈希的生成ID。这样的ID的示例是: 922475bb-ad93-43ee-9487-d2671b886479 改变这种方法没有希望,但是索引访问的性能很差。撇开原因,这可能是无数的,有一件事我注意到,似乎不太理想-尽管是长度正好36个字符的所有许多表中的所有ID值,列类型是varchar(36),不是 char(36)。 除了将每个索引页的条目数量增加很少之外,将列类型更改为固定长度是否会char(36)带来任何显着的索引性能优势? 即在处理固定长度类型时,postgres的执行速度是否比可变长度类型快? 请不要提及微不足道的存储节省-与更改色谱柱所需的手术相比,这已不再重要。

2
使用大IN优化Postgres查询
该查询获取您关注的人创建的帖子列表。您可以追踪的人数不受限制,但是大多数人追踪的人数<1000。 使用这种查询方式,明显的优化将是缓存"Post"id,但是不幸的是我现在没有时间。 EXPLAIN ANALYZE SELECT "Post"."id", "Post"."actionId", "Post"."commentCount", ... FROM "Posts" AS "Post" INNER JOIN "Users" AS "user" ON "Post"."userId" = "user"."id" LEFT OUTER JOIN "ActivityLogs" AS "activityLog" ON "Post"."activityLogId" = "activityLog"."id" LEFT OUTER JOIN "WeightLogs" AS "weightLog" ON "Post"."weightLogId" = "weightLog"."id" LEFT OUTER JOIN "Workouts" AS "workout" ON "Post"."workoutId" …


4
空间索引可以帮助“范围-限制范围”查询吗
问这个问题,特别是对Postgres,因为它对R树/空间索引有很好的支持。 下表具有单词及其频率的树结构(嵌套集模型): lexikon ------- _id integer PRIMARY KEY word text frequency integer lset integer UNIQUE KEY rset integer UNIQUE KEY 和查询: SELECT word FROM lexikon WHERE lset BETWEEN @Low AND @High ORDER BY frequency DESC LIMIT @N 我认为覆盖索引(lset, frequency, word)会很有用,但如果范围内的lset值过多,我可能会认为效果不佳(@High, @Low)。 (frequency DESC)当使用该索引的搜索提早产生@N与范围条件匹配的行时,使用简单的索引有时也足够了。 但是,性能似乎在很大程度上取决于参数值。 有没有一种方法可以使它快速执行,而不管该范围(@Low, @High)是宽还是窄,以及无论哪个高频字都幸运地处于选定的(狭窄)范围内? R树/空间索引会有所帮助吗? 添加索引,重写查询,重新设计表,没有任何限制。

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.