首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

帮忙看上如何建这个索引

2013-01-25 
帮忙看下怎么建这个索引~数据库里面想要这样的数据排序形式,首先要以时间做索引,然后里面再以字母做分类索

帮忙看下怎么建这个索引~
数据库里面想要这样的数据排序形式,首先要以时间做索引,然后里面再以字母做分类索引
时间         字母
2010年1月A
2010年1月A
2010年1月B
2010年1月B
2010年1月C
2010年1月C
2010年1月C
2010年1月D
2010年1月D
2010年2月A
2010年2月A
2010年2月A
2010年2月A
2010年2月B
2010年2月B
2010年2月C
2010年2月D
2010年2月D
2010年3月A
2010年3月A
2010年3月A
2010年3月A
2010年3月B
2010年3月B
2010年3月C
2010年3月D
2010年3月D
下面是直接生产的代码


USE [test]

CREATE NONCLUSTERED INDEX [IX_testTable_1] ON [dbo].[testTable] 
(
[时间] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

USE [test]

CREATE CLUSTERED INDEX [字母] ON [dbo].[testTable] 
(
[name] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO



如果把这两个索引语句颠倒下,会不会出现问题呢? 会不会现在先以字母作为分类索引,然后内部再时间排序。
像下面的这样
时间        字母
2010年1月A
2010年1月A
2010年2月A
2010年2月A
2010年2月A
2010年3月A
2010年3月A
2010年1月B
2010年1月B
2010年2月B
2010年2月B
2010年2月B
2010年3月B
2010年3月B



[解决办法]
USE [test]
 
CREATE  CLUSTERED INDEX [IX_testTable_1] ON [dbo].[testTable] 
(
    [时间] ASC,[name] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

--建一个索引就可以了.
[解决办法]
如果同时用到了复合索引中的所有列,与单独索引做比较的话,那么复合索引要快
如果单一拿出复合索引中的第一列与单独索引比较,那么效率相当
如果单一拿出复合索引中其他列于单独索引比较,那么单独索引快
用复合索引时,索引的查询顺序一定要按照索引的创建顺序
而且如果拆开单独来查询的话,没有什么优势

热点排行