Questions tagged «index-tuning»

确定哪些索引有用而哪些没有用的过程。

3
PostgreSQL可以在索引中使用空值吗?
我读过这本书说 数据库假定Indexed_Col IS NOT NULL覆盖的范围太大而无用,因此数据库不会从这种情况驱动到索引。 我认识到这本书已有十多年的历史了,但是它已经被证明是非常有用的-使用从书页中收集到的指令,我将查询速度提高了十倍。 此外,在运行EXPLAIN ANALYZE上一SELECT查询,我发现没有我的指标正在使用,所有的权利,即使他们应该是。 因此,我的问题是: 假设有一个表包含一个列,该列的列定义包括“ NOT NULL”,并且存在一个覆盖该列的索引,那么该索引是否可以用于该表的查询中,该列是查询的一部分? 喜欢: CREATE TABLE my_table( a varchar NOT NULL ); CREATE INDEX ix_my_table ON my_table(a); SELECT a from my_table;

1
查询性能不佳
我们有一个很大的过程(10,000行以上),通常需要0.5-6.0秒才能运行,具体取决于要处理的数据量。在过去一个月左右的时间里,在我们使用FULLSCAN更新统计信息后,开始花费了30秒钟以上。当速度变慢时,sp_recompile会“修复”该问题,直到夜间统计作业再次运行。 通过比较慢速执行计划和快速执行计划,我将其范围缩小到了特定的表/索引。当它运行缓慢时,它估计将从特定索引返回大约300行,而当它运行速度较快时,它估计将有1行。当它运行缓慢时,在对索引执行查找后将使用表后台处理程序;而当它运行速度较快时,它将不执行表后台处理程序。 使用DBSS SHOW_STATISTICS,我在excel中绘制了索引直方图。我通常希望该图更像是“起伏的丘陵”,但相反,它看起来像一座山,最高点比该图上的其他大多数值高2x-3x。 如果我在没有FULLSCAN的情况下更新统计信息,它看起来会更正常。如果我再次使用FULLSCAN运行它,则看起来就像我上面描述的那样。 这感觉像一个参数嗅探问题,并且特别与上面的(看似)怪异的索引分布有关。 proc接受表值参数,表值参数上是否可以进行参数嗅探? 编辑:proc还需要12个其他参数,其中一些是可选的,其中两个是开始日期和结束日期。 直方图是奇数,还是我吠错了树? 我当然很愿意尝试调整查询和/或尝试调整索引。如果那是很好的解决方案,那时候我的问题更多是关于偏斜的直方图。 我应该提到这是PK IDENTITY聚集索引。我们有两个互相通信的系统,一个是旧系统,一个是新的本地系统。两个系统都存储相似的数据。为了使它们保持同步,即使将数据添加到旧系统中(完成RESEED处理),也可以在将新事物添加到旧系统中后在新系统中的此表上增加PK。因此,此列中的编号可能存在​​一些差距。记录很少删除(如果有的话)。 任何想法将不胜感激。我非常高兴收集/包含更多信息。

4
使用广泛的PK与单独的合成密钥和UQ之间的性能考虑因素是什么?
我有几个表,其中的记录可以通过几个广泛的业务领域进行唯一标识。过去,我将这些字段用作PK,并牢记以下好处: 简单; 没有多余的字段,只有一个索引 群集允许快速合并联接和基于范围的过滤器 但是,我听说过创建合成IDENTITY INTPK,而用单独的UNIQUE约束来强制业务密钥的情况。优点是,较窄的PK使得二级索引要小得多。 如果一个表有没有比PK其他指标,我看不出有任何理由赞成第二种方法,虽然在一个大表它可能是最好的假设,指数可能在未来是必要的,因此,有利于在狭窄合成PK 。我有什么需要考虑的地方吗? 顺便说一句,我并不是在反对在数据仓库中使用合成密钥,我只是对何时使用单个广泛的PK,何时使用狭窄的PK加广泛的英国感兴趣。

1
聚簇索引查找和非聚簇索引查找之间的区别
聚集索引(CI)搜索和非聚集索引(NCI)搜索之间有什么区别?一个人比另一个人表现更好吗? 我之所以这样问,是因为我有一个具有5000万行和150列的表。它有一列名为ID定义为聚簇索引的列。还有一个具有相同索引键ID和七个include-d列的NCI 。在我看来,NC索引在这里是重复的,可以安全地删除。 因此,我想获得一些专家意见/建议,以确保可以安全地放下它或保持其完好无损?

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



1
索引列顺序的WHERE-JOIN-ORDER-(SELECT)规则是否错误?
我正在尝试将此(子)查询改进为更大查询的一部分: select SUM(isnull(IP.Q, 0)) as Q, IP.OPID from IP inner join I on I.ID = IP.IID where IP.Deleted=0 and (I.Status > 0 AND I.Status <= 19) group by IP.OPID Sentry Plan Explorer指出了由上面的查询执行的一些相对昂贵的表dbo。[I]键查找。 表dbo.I CREATE TABLE [dbo].[I] ( [ID] UNIQUEIDENTIFIER NOT NULL, [OID] UNIQUEIDENTIFIER NOT NULL, [] UNIQUEIDENTIFIER NOT NULL, [] …

1
CLUSTER对性能的影响
我正在尝试优化我的Postgres 9.2数据库以加快具有日期限制的查询。 我有一timestamp列,但大多数情况下我都想找一天,所以我创建了一个timestamp要date解析的索引: CREATE INDEX foo_my_timestamp_idx ON foo USING btree ((my_timestamp::date) DESC); 现在,为了提高性能,我CLUSTER foo使用上面的索引表: CLUSTER foo USING foo_my_timestamp_idx; 根据SQL-CLUSTER上的手册,该表 根据索引信息进行物理重新排序 我想知道使用表PK(请说id_foo)对其他查询的性能是否有影响。有没有缺点?

3
调整具有多个联接的查询
我有这个查询.. 214执行/分钟,平均44.42 CPU(ms)有没有办法使它更快 SELECT P.Id id0, P.ProgramId ProgramId1, P.ProgramName ProgramName2, P.ProgramLevel ProgramLevel3, P.Department Department4, P.Track Track5, P.AcademicYear AcademicYear6, P.StartTerm StartTerm7, P.Delivery Delivery8, P.Fee Fee9, P.City City10, P.STATE State11, P.StartDate StartDate12, P.Deadline Deadline13, P.DeadlineDisplay DeadlineDisplay14, P.ProgramType ProgramType15, O.Id as OrganizationId16, O.NAME OrganizationName17, P.ApplicationType ApplicationType18, P.Concentration Concentration19, P.ZipCode ZipCode20, P.Campus Campus21, P.WADisplayName …

3
索引调整问题
我正在调整一些索引,看到一些问题想听取您的建议 在1个表上有3个索引 dbo.Address.IX_Address_ProfileId [1 KEY] ProfileId {int 4} Reads: 0 Writes:10,519 dbo.Address.IX_Address [2 KEYS] ProfileId {int 4}, InstanceId {int 4} Reads: 0 Writes:10,523 dbo.Address.IX_Address_profile_instance_addresstype [3 KEYS] ProfileId {int 4}, InstanceId {int 4}, AddressType {int 4} Reads: 149677 (53,247 seek) Writes:10,523 1-我真的需要前两个索引,还是应该删除它们? 2-正在运行的查询使用profileid = xxxx的使用条件,以及其他使用profileid = xxxx且InstanceID = xxxxxx的使用条件。为什么优化器选择第三索引而不是第一索引或第二索引? 我也正在运行一个查询,使每个索引上的Lock等待。如果我得到这些计数,应该怎么做才能调整该指数? Row …

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
过滤按行版本排序的数据
我有一个具有以下结构的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的一个子集上实现增量数据检索,包括更新。 …
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.