sysbase 5.0 表table1 字段:col1,col2,col3
试验如下:
1.
建立索引idx1 on col1
执行select * from table1 where col1='A' 使用idx1
执行select * from table1 where col1='A' and col2='B' 也使用idx1
2.
删除索引idx1,然后建立idx2 on (col1,col2)复合索引
执行以上两个查询,也都使用idx2
3.
如果两个索引idx1,idx2都存在
并不是 where col1='A'用idx1;where col1='A' and col2='B' 用idx2。
其查询优化器使用其中一个以前常用索引。要么都用idx1,要么都用idx2.
所以对一张表有没有必要同时建立一个单索引 on col1,和一个复合索引 on (col1,col2)?
(假设对这张表但条件查询,复合条件查询以后都要用到).
由此可见,是不是建立多字段(包含5、6个字段)的复合索引没有什么好处?
相对而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率?
---我这里假设对这张表以后会进行各种使用几率类等的不同where条件的查询。
这是我对复合索引包含字段多少合适的疑问。以前各贴均认为根据估计的查询条件决定复合索引包含的字段。
但如果查询条件变化较大,(如有时用date限制,有时用sex限制...)怎样才能建立经济的索引。我实在不清楚。
试验如下:
1.
建立索引idx1 on col1
执行select * from table1 where col1='A' 使用idx1
执行select * from table1 where col1='A' and col2='B' 也使用idx1
2.
删除索引idx1,然后建立idx2 on (col1,col2)复合索引
执行以上两个查询,也都使用idx2
3.
如果两个索引idx1,idx2都存在
并不是 where col1='A'用idx1;where col1='A' and col2='B' 用idx2。
其查询优化器使用其中一个以前常用索引。要么都用idx1,要么都用idx2.
所以对一张表有没有必要同时建立一个单索引 on col1,和一个复合索引 on (col1,col2)?
(假设对这张表但条件查询,复合条件查询以后都要用到).
由此可见,是不是建立多字段(包含5、6个字段)的复合索引没有什么好处?
相对而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率?
---我这里假设对这张表以后会进行各种使用几率类等的不同where条件的查询。
这是我对复合索引包含字段多少合适的疑问。以前各贴均认为根据估计的查询条件决定复合索引包含的字段。
但如果查询条件变化较大,(如有时用date限制,有时用sex限制...)怎样才能建立经济的索引。我实在不清楚。