假设我有下表
UserID (身份)PKUserName - 唯一非nullUserEmail - 唯一非null建议什么是最佳性能?
UserName和UserEmail单独创建非聚集索引要么
请分享你为什么一个人优于其他人的想法.
我有一个非常简单的桌子,为人们存储标题("先生","太太"等).这是我正在做的简要版本(在这个例子中使用临时表,但结果是相同的):
create table #titles (
t_id tinyint not null identity(1, 1),
title varchar(20) not null,
constraint pk_titles primary key clustered (t_id),
constraint ux_titles unique nonclustered (title)
)
go
insert #titles values ('Mr')
insert #titles values ('Mrs')
insert #titles values ('Miss')
select * from #titles
drop table #titles
Run Code Online (Sandbox Code Playgroud)
请注意,表的主键是聚类的(显式,为了示例),并且标题列有一个非聚集唯一性约束.
以下是select操作的结果:
t_id title
---- --------------------
3 Miss
1 Mr
2 Mrs
Run Code Online (Sandbox Code Playgroud)
查看执行计划,SQL在群集主键上使用非聚集索引.我猜这解释了为什么结果按此顺序返回,但我不知道为什么它会这样做.
有任何想法吗?更重要的是,任何阻止这种行为的方法?我希望按照插入的顺序返回行.
谢谢!
sql-server clustered-index sql-execution-plan non-clustered-index
我正在使用SQL Server 2008 R2,我想在非唯一的可空字段上添加非聚集索引.我的索引还会包含一个列,以避免访问我的聚簇索引:
CREATE INDEX IX_My_Index
ON MyTable (myBasicField)
INCLUDE (myIncludedField);
Run Code Online (Sandbox Code Playgroud)
在实际的数据中myBasicField会有很多,NULLs我想知道是否有一种方法可以通过不扫描这些来提高性能NULLs,或者防止将NULL值存储在我的索引上.
提前致谢.
t-sql indexing nullable sql-server-2008-r2 non-clustered-index
如果我们在 SQL Server 中已经有非聚集索引的列上再创建一个非聚集索引,会产生什么效果?
我正在学习一个INDEX()在CREATE TABLE语句中使用的教程,但没有解释它是集群还是非集群.我的问题是:INDEX()在CREATE TABLE语句中使用会导致聚簇索引还是非聚簇索引?
例如:
CREATE TABLE test (a varchar(30), b varchar(30), index(a));
/* Is column A a clustered or non-clustered index? */
Run Code Online (Sandbox Code Playgroud)
还想知道如何做相反的事情:如果示例导致非聚集索引,您如何编写聚簇索引,反之亦然?
当我使用下面的查询为 MS SQL Server 中的列创建索引时
create index IX_indexname on tablename(columnname);
Run Code Online (Sandbox Code Playgroud)
如果不提及它是聚集索引还是非聚集索引,那么将创建什么索引?默认索引是哪个?
是否可以在sql server 2005中将聚簇索引转换为非聚簇索引或非聚簇索引转换为聚簇索引.
请将此查询转换为聚集索引:
create index index1 on mytable(firstcolumn)
Run Code Online (Sandbox Code Playgroud)
请将此查询转换为非聚集索引:
create clustered index clusindex1 on mytable(cluscolumn)
Run Code Online (Sandbox Code Playgroud) 我有一个崭露头角的开发人员,他非常热衷于他称之为"矩阵"的东西
我正在寻找同行的洞察力
简而言之,这就是我们所拥有的:
- 1个高度非规范化的表,大约120列
- 数据点包括帐户,客户,家庭,关系,产品,员工等...
- 每列一个索引:大约120个非聚集索引
-今天索引使用的数据库中大约90%的空间都是此表的索引
- 今天大约有150万行有很多空
- 表加载了一个存储过程,其核心是动态SQL
- 所有字段名都是通用的,不是描述数据
- 数据字典类型表与动态SQL一起使用以将任何数据点加载到任何字段
- 字段映射不是静态的:今天列dim_0001是客户名称,但明天可能是别的
- 没有主键
- 没有外键
- 没有实际约束(例如,所有字段都可以为空)
该表的参数:
- 使编写查询更简单,因为它消除了编写某些连接的需要
预期用途:
- 最终用户层,将成为Business Objects中Universe构建的核心组件
- 后ETL过程开发
我的建议要么杀死今天的进程(在测试环境中进行早期开发),要么将其移至测试的下一步.
根据我所做的研究,我的教育和经验,我不支持它,并希望一旦依赖这些表的一个或两个进程迁移到另一个解决方案,表就会被删除.
下面的脚本供您参考(我仅限于一个索引示例).
您可以提供的任何见解(甚至只是一个单词的意见)都是有价值的
-- The Matrix
CREATE TABLE [z005497].[tblMatrix](
[as_of_dt] [datetime] NOT NULL,
[dim_0001] [varchar](100) NULL,
[dim_0002] [varchar](103) NULL,
[dim_0003] [varchar](100) NULL,
[dim_0004] [varchar](100) NULL,
[dim_0005] [varchar](100) NULL,
[dim_0006] [varchar](100) NULL,
[dim_0007] [varchar](100) NULL,
[dim_0008] [varchar](100) NULL,
[dim_0009] [varchar](100) NULL,
[dim_0010] [varchar](100) NULL,
[dim_0011] …Run Code Online (Sandbox Code Playgroud) database-design normalization dynamic-sql sql-server-2008 non-clustered-index
谁能告诉我Sqlite是否支持聚簇索引和非聚簇索引?如果它确实如何使非主键的列成为非聚集索引?我对数据库概念很新,因此很困惑..
我有一个145000行的表.并没有任何索引.
当我在sql下运行时.我按预期在执行计划上找到了表扫描.它生成六行和3481逻辑读取.
SET STATISTICS IO ON
SELECT columnA FROM table WHERE LEN(columnA)<>5
Run Code Online (Sandbox Code Playgroud)
然后我在columnA上添加一个聚簇索引并运行sql.I在执行计划中找到一个集群索引扫描.它生成六行和3511逻辑读取.我可以理解B树节点读取的更大逻辑读取.
但令我困惑的是,我在columnA上使用非聚集索引而不是聚簇索引并运行sql.我在执行计划上找到了索引扫描.它生成六行,只需要417个逻辑读取!
我不认为len()函数可以利用索引.但是为什么columnA上的非聚集索引会减少逻辑读取次数(9次)?