組合索引后,對其中一個字段索引有用嗎?

ks_reny 2009-05-06 02:07:39
RT
...全文
430 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdyyr 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 ks_reny 的回复:]
我的意思是我已經有組合索引了,可能有多個字段組合,我用其中某一個或幾個(但不是組合索引包含的全部字段)字段來查詢,這樣索引起到作用了嗎?
[/Quote]
要有索引的第一字段。
ks_reny 2009-05-06
  • 打赏
  • 举报
回复
我的意思是我已經有組合索引了,可能有多個字段組合,我用其中某一個或幾個(但不是組合索引包含的全部字段)字段來查詢,這樣索引起到作用了嗎?
csdyyr 2009-05-06
  • 打赏
  • 举报
回复
如果是用组合索引的一个字段查找,只有第一个字段才有效。
csdyyr 2009-05-06
  • 打赏
  • 举报
回复
楼主的意思是用组合索引的一个字段查找还是再添加一个索引?
等不到来世 2009-05-06
  • 打赏
  • 举报
回复
如果在没有按照组合索引顺序使用条件的查询语句上强制使用索引,
效率恐怕反而更低。
lgx0914 2009-05-06
  • 打赏
  • 举报
回复
帮顶
csdyyr 2009-05-06
  • 打赏
  • 举报
回复
数据太少,SQL查询优化计划选择了表扫描。
ks_reny 2009-05-06
  • 打赏
  • 举报
回复
看來分給少了,明天加分.
liangCK 2009-05-06
  • 打赏
  • 举报
回复
测试索引的时候.应该要用大量的数量去分析..而不要用几行的数据去判断索引.
水族杰纶 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 csdyyr 的回复:]
引用 10 楼 csdyyr 的回复:
--强制使用索引:
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10),MENO VARCHAR(10))
INSERT TB SELECT 1,'A','TEST1'
INSERT TB SELECT 2,'B','TEST2'
CREATE INDEX INDEX_TEST ON TB(ID,[NAME])
GO
SET SHOWPLAN_ALL ON
GO
--SELECT * FROM TB WHERE ID=1
SELECT * FROM TB WITH(INDEX(INDEX_TEST)) WHERE NAME='A'
GO
SE…
[/Quote]
嗯嗯
csdyyr 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 csdyyr 的回复:]
--强制使用索引:
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10),MENO VARCHAR(10))
INSERT TB SELECT 1,'A','TEST1'
INSERT TB SELECT 2,'B','TEST2'
CREATE INDEX INDEX_TEST ON TB(ID,[NAME])
GO
SET SHOWPLAN_ALL ON
GO
--SELECT * FROM TB WHERE ID=1
SELECT * FROM TB WITH(INDEX(INDEX_TEST)) WHERE  NAME='A'
GO
SET SHOWPLAN_ALL OFF
GO

DROP TABLE TB
[/Quote]

--强制使用索引:
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10),MENO VARCHAR(10))
INSERT TB SELECT 1,'A','TEST1'
INSERT TB SELECT 2,'B','TEST2'
CREATE INDEX INDEX_TEST ON TB(ID,[NAME])
GO
SET SHOWPLAN_ALL ON
GO
--SELECT * FROM TB WHERE ID=1
SELECT * FROM TB WITH(INDEX(INDEX_TEST)) WHERE NAME='A'
GO
SET SHOWPLAN_ALL OFF
GO

DROP TABLE TB
csdyyr 2009-05-06
  • 打赏
  • 举报
回复
--强制使用索引:
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10),MENO VARCHAR(10))
INSERT TB SELECT 1,'A','TEST1'
INSERT TB SELECT 2,'B','TEST2'
CREATE INDEX INDEX_TEST ON TB(ID,[NAME])
GO
SET SHOWPLAN_ALL ON
GO
--SELECT * FROM TB WHERE ID=1
SELECT * FROM TB WITH(INDEX(INDEX_TEST)) WHERE NAME='A'
GO
SET SHOWPLAN_ALL OFF
GO

DROP TABLE TB
ks_reny 2009-05-06
  • 打赏
  • 举报
回复
我現在遇到的問題,在Oracle中,有個表,剛開始建的組合索引 包括字段(A,B,C),隨後,我有建了組合索引,包括字段(A,B,C,D),也有的包含(B,C).我現在想優化一下索引,是不是只保留包含字段多的那個索引就可以了.
水族杰纶 2009-05-06
  • 打赏
  • 举报
回复
--這樣又不走索引
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10),MENO VARCHAR(10))
INSERT TB SELECT 1,'A','TEST1'
INSERT TB SELECT 2,'B','TEST2'
CREATE INDEX INDEX_TEST ON TB(ID,[NAME])
GO
SET SHOWPLAN_ALL ON
GO
--SELECT * FROM TB WHERE ID=1
SELECT * FROM TB WHERE NAME='A'
GO
SET SHOWPLAN_ALL OFF
/*StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
------------------------------------------------------------------------- ----------- ----------- ----------- ------------------------------ ------------------------------ -------------------------------------------------------- ------------------------------------ ------------------------ ------------------------ ------------------------ ----------- ------------------------ ------------------------------------ -------- ------------------------------ -------- ------------------------
--SELECT * FROM TB WHERE ID=1
SELECT * FROM TB WHERE NAME='A' 170 1 0 NULL NULL 1 NULL 1.0 NULL NULL NULL 3.7659202E-2 NULL NULL SELECT 0 NULL
|--Table Scan(OBJECT:([db_study].[dbo].[TB]), WHERE:([TB].[NAME]='A')) 170 3 1 Table Scan Table Scan OBJECT:([db_study].[dbo].[TB]), WHERE:([TB].[NAME]='A') [TB].[MENO], [TB].[NAME], [TB].[ID] 1.0 3.7578501E-2 8.0700003E-5 29 3.7659202E-2 [TB].[MENO], [TB].[NAME], [TB].[ID] NULL PLAN_ROW 0 1.0

(影響 2 個資料列)
*/
ks_reny 2009-05-06
  • 打赏
  • 举报
回复
謝謝各位,Oracle也適用嗎?
等不到来世 2009-05-06
  • 打赏
  • 举报
回复
奇怪,我用水兄的数据,为什么都是table scan?
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10),MENO VARCHAR(10))
INSERT TB SELECT 1,'A','TEST1'
INSERT TB SELECT 2,'B','TEST2'
CREATE INDEX INDEX_TEST ON TB(ID,[NAME])
GO
SET SHOWPLAN_ALL ON
GO
SELECT * FROM TB WHERE ID=1
/*
StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
------------------------------------------------------------------------------------ ----------- ----------- ----------- ------------------------------ ------------------------------ ------------------------------------------------------------------- --------------------------------------------------------------------------------- ------------- ------------- ------------- ----------- ---------------- --------------------------------------------------------------------------------- -------- ---------------------------------------------------------------- -------- ------------------
SELECT * FROM TB WHERE ID=1 1 1 0 NULL NULL 1 NULL 1 NULL NULL NULL 0.0032842 NULL NULL SELECT 0 NULL
|--Table Scan(OBJECT:([testdb].[dbo].[TB]), WHERE:([testdb].[dbo].[TB].[ID]=(1))) 1 2 1 Table Scan Table Scan OBJECT:([testdb].[dbo].[TB]), WHERE:([testdb].[dbo].[TB].[ID]=(1)) [testdb].[dbo].[TB].[ID], [testdb].[dbo].[TB].[NAME], [testdb].[dbo].[TB].[MENO] 1 0.003125 0.0001592 23 0.0032842 [testdb].[dbo].[TB].[ID], [testdb].[dbo].[TB].[NAME], [testdb].[dbo].[TB].[MENO] NULL PLAN_ROW 0 1

(2 行受影响)
*/
xiequan2 2009-05-06
  • 打赏
  • 举报
回复
水族杰纶 2009-05-06
  • 打赏
  • 举报
回复
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10),MENO VARCHAR(10))
INSERT TB SELECT 1,'A','TEST1'
INSERT TB SELECT 2,'B','TEST2'
CREATE INDEX INDEX_TEST ON TB(ID,[NAME])
GO
SET SHOWPLAN_ALL ON
GO
SELECT * FROM TB WHERE ID=1
SELECT * FROM TB WHERE MENO='TEST2'
/*StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
------------------------------------------------------------------------------------------------------------------ ----------- ----------- ----------- ------------------------------ ------------------------------ -------------------------------------------------------------------------------------------- ------------------------------------ ------------------------ ------------------------ ------------------------ ----------- ------------------------ ------------------------------------ -------- ------------------------------ -------- ------------------------
SELECT * FROM TB WHERE ID=1 9 1 0 NULL NULL 1 NULL 1.0 NULL NULL NULL 3.3329551E-3 NULL NULL SELECT 0 NULL
|--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([db_study].[dbo].[TB])) 9 3 1 Bookmark Lookup Bookmark Lookup BOOKMARK:([Bmk1000]), OBJECT:([db_study].[dbo].[TB]) [TB].[MENO], [TB].[NAME], [TB].[ID] 1.0 4.8826954E-5 0.0000011 29 3.3329551E-3 [TB].[MENO], [TB].[NAME], [TB].[ID] NULL PLAN_ROW 0 1.0
|--Index Seek(OBJECT:([db_study].[dbo].[TB].[INDEX_TEST]), SEEK:([TB].[ID]=Convert([@1])) ORDERED FORWARD) 9 4 3 Index Seek Index Seek OBJECT:([db_study].[dbo].[TB].[INDEX_TEST]), SEEK:([TB].[ID]=Convert([@1])) ORDERED FORWARD [Bmk1000] 1.0 3.2034251E-3 7.9603E-5 22 3.283028E-3 [Bmk1000] NULL PLAN_ROW 0 1.0

SELECT * FROM TB WHERE MENO='TEST2' 10 5 0 NULL NULL 2 NULL 1.0 NULL NULL NULL 3.7659202E-2 NULL NULL SELECT 0 NULL
|--Table Scan(OBJECT:([db_study].[dbo].[TB]), WHERE:([TB].[MENO]=[@1])) 10 7 5 Table Scan Table Scan OBJECT:([db_study].[dbo].[TB]), WHERE:([TB].[MENO]=[@1]) [TB].[MENO], [TB].[NAME], [TB].[ID] 1.0 3.7578501E-2 8.0700003E-5 27 3.7659202E-2 [TB].[MENO], [TB].[NAME], [TB].[ID] NULL PLAN_ROW 0 1.0

(影響 5 個資料列)*/
htl258_Tony 2009-05-06
  • 打赏
  • 举报
回复
跟单索引一样能用到.
rucypli 2009-05-06
  • 打赏
  • 举报
回复
有用,看看执行计划就行了
加载更多回复(1)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧