Questions tagged «index»

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

3
在大型表上创建聚集索引的无痛方法?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 因此,我们有一个客户站点抱怨性能严重下降。我看了一眼,很明显,问题出在因为Somebody Else(grrrr)设计了一个表,该表包含大约2000万条记录而没有聚簇索引。 现在,我想在该表上创建聚簇索引-但是在我的测试环境中,我的create index命令已经运行了一个小时,但仍未完成。客户站点是一个工作日为24/7的车间,在创建索引时无法承受一个小时的停机时间。 是否有一些不那么费力的方法来创建索引,该索引要么可以快速完成工作,要么以某种聪明的方式完成工作,而这种忙碌的工作不会完全破坏服务器的性能? 我们正在使用SQL Server企业版。

7
在哪里可以找到有关索引策略的指导?
我们大多数人可能会同意使用数据库索引是好的。太多的索引和性能实际上可能会降低。 通常,应该为哪些字段建立索引? 哪些字段不应该建立索引? 在实现过多索引与不足索引以达到性能提升而不是降级之间的平衡时,使用索引的规则是什么?
22 index 

2
对于每种类型的查询,我都需要单独的索引,还是一个多列索引可以工作?
我已经有点知道这个问题的答案了,但是我总是觉得好像我还需要进一步探讨这个话题。 我的基本理解是,一般而言,仅包含您可能在任何给定时间查询/排序的所有字段的单个索引可能不太有用,但是我已经看到了这种类型的东西。就像这样,有人想:“好吧,如果我们将所有这些东西都放在一个索引中,数据库就可以使用它来查找所需的东西”,而从未见过针对某些实际查询运行的执行计划。 想象一个这样的表: id int pk/uid name varchar(50) customerId int (foreign key) dateCreated datetime 我可能会看到包含name,customerId和dateCreated字段的单个索引。 但是我的理解是,这样的索引不会在查询中使用,例如: SELECT [id], [name], [customerId], [dateCreated] FROM Representatives WHERE customerId=1 ORDER BY dateCreated 对于这样的查询,在我看来,一个更好的主意是使用包括customerIdand dateCreated字段的索引,该customerId字段为“ first”。这将创建一个索引,该索引将以某种方式组织数据,以使该查询可以快速找到所需内容(按所需顺序)。 我看到的另一件事,也许与第一件事一样频繁,是每个字段上的单独索引。所以,每一个上name,customerId和dateCreated领域。 与第一个示例不同,在我看来,这种安排有时至少部分有用。查询的执行计划可能表明,至少它是使用上的索引customerId来选择记录,但没有使用带有dateCreated字段的索引来对记录进行排序。 我知道这是一个广泛的问题,因为对任何特定表集上的任何特定查询的特定答案通常是查看执行计划说的将要执行的操作,否则将表和查询的详细信息纳入其中帐户。另外,我知道这取决于查询的运行频率,而不是为其维护特定索引的开销。 但是我想我要问的是作为索引的一般“起点”,为特定的,经常被拉的查询以及WHERE或ORDER BY子句中的字段具有特定索引的想法是否有意义?
22 sql-server  index 

3
如何为国际数据库选择排序规则?
我正在设计一个数据库,该数据库将以不同的语言存储数据(使用UTF-8),所以我认为显示查询结果的最佳方法是在查询过程中根据用户的语言对其进行排序(因为不止一种正确的方法),如下所示: SELECT a < b COLLATE "de_DE" FROM test1; 假设这是处理国际数据的正确方法,这是数据库本身的最佳整理方法?PostgreSQL文档说: C和POSIX归类均指定“传统C”行为,其中仅将ASCII字母“ A”至“ Z”视为字母,并且严格按字符代码字节值进行排序。 我认为这是这种情况下的最佳选择,还是我错了? (奖金问题:在查询本身中选择排序规则是否太慢?)。

1
为什么CREATE INDEX…WITH ONLINE = ON会在几分钟内阻止对表的访问?
我有一个现有表: CREATE TABLE dbo.ProofDetails ( ProofDetailsID int NOT NULL CONSTRAINT PK_ProofDetails PRIMARY KEY CLUSTERED IDENTITY(1,1) , ProofID int NULL , IDShownToUser int NULL , UserViewedDetails bit NOT NULL CONSTRAINT DF_ProofDetails_UserViewedDetails DEFAULT ((0)) ); 该表有150,000,000行。系统以24x7x365运行,因此没有定期发生的维护时段。 我想向表添加索引,并且使用SQL Server企业版,我应该能够做到这一点而不会阻止对表的写访问。我使用的命令是: CREATE INDEX IX_ProofDetails_ProofID_Etc ON dbo.ProofDetails (ProofID, IDShownToUser) INCLUDE (UserViewedDetails) WITH (ONLINE=ON , ALLOW_ROW_LOCKS=ON , …


4
RDBMS上的“索引”是什么意思?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 我像大多数开发人员一样使用索引(大多数情况下...索引!),但是我敢肯定,有很多微妙的方法可以使用索引来优化数据库。我不确定它是否特定于DBMS的任何实现。 我的问题是:什么是如何使用索引的好示例(基本情况,显而易见的情况除外),以及在表上指定索引时DBMS如何优化其数据库?
21 index  rdbms 


2
使用位图索引扫描的查询计划中的“重新检查条件:”行
这是从注释到上一个问题的副产品: Postgres 9.4.4查询需要永远 使用PostgreSQL 9.4,Recheck Cond:在所输出的查询计划中的位图索引扫描之后,似乎总是出现一行EXPLAIN。 就像EXPLAIN所引用问题的输出中一样: -> Bitmap Heap Scan on table_three (cost=2446.92..19686.74 rows=8159 width=7) Recheck Cond: (("timestamp" > (now() - '30 days'::interval)) AND (client_id > 0)) -> BitmapAnd (cost=2446.92..2446.92 rows=8159 width=0) -> Bitmap Index Scan on table_one_timestamp_idx (cost=0.00..1040.00 rows=79941 width=0) Index Cond: ("timestamp" > (now() - '30 days'::interval)) …

1
列存储索引的结构是什么?
代号Denali为SQL Server 2012的新功能之一是Columnstore索引。 我对常规的旧行存储索引了解很多,例如b树结构,叶级页面和b树页面之间的存储差异,所包含字段的影响,优化使用它们,键顺序等。 我很难获得有关columnstore索引内部的任何良好信息。 结构如何? 有树吗?还有其他结构吗? 数据如何组织? 哪种类型的特定运算符最适合使用它? 使用其他反图案时要避免使用它们? 我可以找到的很多关于它们的内容基本上与“正常”索引完全相反,即,没有键的顺序,没有包含的字段,仅是非聚集的。 任何见解都表示赞赏。

4
MySQL中的“ CREATE INDEX”是线性运算吗?
我的意思是: 如果使用以下命令在表上创建索引 n行需要花费t时间。在同一张表上创建索引1000*n大约需要花费1000*t时间。 我要实现的目标是通过在更小的测试数据库上创建相同的索引来估计在生产数据库上创建索引所需的时间。
20 mysql  index 

2
如何创建索引以加快对表达式的聚合LIKE查询?
我可能在标题中提出了错误的问题。这是事实: 我的客户服务人员一直抱怨在基于Django的站点的管理界面上进行客户查找时响应速度慢。 我们正在使用Postgres 8.4.6。我开始记录慢速查询,并发现了这个罪魁祸首: SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%') 此查询最多需要32秒才能运行。这是EXPLAIN提供的查询计划: QUERY PLAN Aggregate (cost=205171.71..205171.72 rows=1 width=0) -> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0) Filter: (upper((email)::text) ~~ '%DEYK%'::text) 因为这是由Django ORM从Django Admin应用程序生成的Django QuerySet中生成的查询,所以我对该查询本身没有任何控制权。索引似乎是合理的解决方案。我尝试创建索引来加快速度,但是并没有什么不同: CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text)) 我究竟做错了什么?如何加快查询速度?

1
默认情况下,mysqldump是否导出索引?
我打得四处少许使用mysqldump,我想知道,如果它的出口指数(FULLTEXT,INDEX,...),默认情况下。我仔细阅读,发现了这个选项: --disable-keys, -K 这表明它确实确实导出了索引。但是我不想相信自己的解释,而是想确保自己理解正确(或错误;-)。谁能确认?

2
SQL INDEX-它是如何工作的?
我对数据库和SQL的了解大部分是基于大学课程。无论如何,我在一家正在使用数据库的公司里呆了几个月(差不多一年)。 我读过一些书,我已经在一些培训参加有关的数据库,例如MySQL,PostgreSQL,SQLite,Oracle和几个同样nonSQL dbS,从而我们MongoDB,Redis,ElasticSearch等。 就像我说的那样,我是乞gg,因为他缺乏很多知识,但是今天,有人告诉了我什么,这完全违背了我的乞gg的知识。 让我解释。让我们以SQL数据库为例,创建一个Person内部表很少的简单表: id | name | age ----------------- 1 | Alex | 24 2 | Brad | 34 3 | Chris | 29 4 | David | 28 5 | Eric | 18 6 | Fred | 42 7 | Greg | 65 8 | Hubert | …
19 index 


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.