自增id常用,我使用了主键,
还有a-z各类型的一堆字段,
如果经常使用a、b、c、d做查询条件,用e、f、g做排序条件
该怎么建立索引呢,
是a/b/c/d/e/f/g各建一个索引,
还是a/b/c/d各建一个索引,e/f/g合建在一个索引上
还是a/b/c/d/e/f/g都合建在一个索引上呢,
他们各自有什么区别,性能上有什么影响?
大侠们,不考虑小数据,视为单表数据在1w以上。
还有,如果数据库有100个表,在每个表的查询字段和排序字段上都建立索引会降低数据库性能吗???
请各位大侠赐教,望普及我等小白,奉上100分。
13 个解决方案
#1
各位大写,初次论坛发帖所以结贴率是0,别误会,一定及时处理
#2
如果经常使用a、b、c、d做查询条件
你的查询条件是组合的,还是单个字段的,比如:
where a = xx
where b = yy
。。。
还是:where a=xx and b=yy and c = zz
你的查询条件是组合的,还是单个字段的,比如:
where a = xx
where b = yy
。。。
还是:where a=xx and b=yy and c = zz
#3
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
#4
每个字段建索引还是多个字段建在一个索引上,要看你是经常单个条件查询,还是会进行多个条件组合查询,如果多个条件组合查询,那么建议多个字段建在一个索引上
#5
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
#6
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
#7
当然,按照上面的规则建立索引,不过还是要建立尽量少的索引,因为索引建多了,会导致insert、update等操作的开销增大,降低性能。
还有,在建立了索引后,可以通过如下的查询,来查询索引的使用的情况:
select *
from sys.dm_db_index_usage_stats
如果,对index_seek的次数,很小,那么可以考虑删除这个索引,再尝试建立其他的索引,如此多次,就能建立真正让查询使用的索引,让这些索引都能发挥作用,同时尽量减少索引的数量
还有,在建立了索引后,可以通过如下的查询,来查询索引的使用的情况:
select *
from sys.dm_db_index_usage_stats
如果,对index_seek的次数,很小,那么可以考虑删除这个索引,再尝试建立其他的索引,如此多次,就能建立真正让查询使用的索引,让这些索引都能发挥作用,同时尽量减少索引的数量
#8
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
那像 where a=x and b=y and c=z order by f,g,h这样的
排序字段是单独建立索引还是和条件字段一起组合建立索引呢
#9
当一个表只有少数几列时,单独创建索引并没有什么严重的错误,但是当表的列很多时,由于存储、维护的原因,不建议单独建索引,很多副作用都是因为存储和维护开销导致的。
#10
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
那像 where a=x and b=y and c=z order by f,g,h这样的
排序字段是单独建立索引还是和条件字段一起组合建立索引呢
可以建立索引:
(a,b,c,f,g,h)
#11
当一个表只有少数几列时,单独创建索引并没有什么严重的错误,但是当表的列很多时,由于存储、维护的原因,不建议单独建索引,很多副作用都是因为存储和维护开销导致的。
谢谢提醒,一定注意
#12
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
那像 where a=x and b=y and c=z order by f,g,h这样的
排序字段是单独建立索引还是和条件字段一起组合建立索引呢
可以建立索引:
(a,b,c,f,g,h)
收到,谢谢
#13
如果你不知道怎么建,可以把所有索引去掉(可以先保留索引的定义),然后在查询界面右键→【在数据库引擎优化顾问中xxx】那个,然后直接点开始分析,应该会有一些建议,不过仅供参考
#1
各位大写,初次论坛发帖所以结贴率是0,别误会,一定及时处理
#2
如果经常使用a、b、c、d做查询条件
你的查询条件是组合的,还是单个字段的,比如:
where a = xx
where b = yy
。。。
还是:where a=xx and b=yy and c = zz
你的查询条件是组合的,还是单个字段的,比如:
where a = xx
where b = yy
。。。
还是:where a=xx and b=yy and c = zz
#3
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
#4
每个字段建索引还是多个字段建在一个索引上,要看你是经常单个条件查询,还是会进行多个条件组合查询,如果多个条件组合查询,那么建议多个字段建在一个索引上
#5
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
#6
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
#7
当然,按照上面的规则建立索引,不过还是要建立尽量少的索引,因为索引建多了,会导致insert、update等操作的开销增大,降低性能。
还有,在建立了索引后,可以通过如下的查询,来查询索引的使用的情况:
select *
from sys.dm_db_index_usage_stats
如果,对index_seek的次数,很小,那么可以考虑删除这个索引,再尝试建立其他的索引,如此多次,就能建立真正让查询使用的索引,让这些索引都能发挥作用,同时尽量减少索引的数量
还有,在建立了索引后,可以通过如下的查询,来查询索引的使用的情况:
select *
from sys.dm_db_index_usage_stats
如果,对index_seek的次数,很小,那么可以考虑删除这个索引,再尝试建立其他的索引,如此多次,就能建立真正让查询使用的索引,让这些索引都能发挥作用,同时尽量减少索引的数量
#8
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
那像 where a=x and b=y and c=z order by f,g,h这样的
排序字段是单独建立索引还是和条件字段一起组合建立索引呢
#9
当一个表只有少数几列时,单独创建索引并没有什么严重的错误,但是当表的列很多时,由于存储、维护的原因,不建议单独建索引,很多副作用都是因为存储和维护开销导致的。
#10
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
那像 where a=x and b=y and c=z order by f,g,h这样的
排序字段是单独建立索引还是和条件字段一起组合建立索引呢
可以建立索引:
(a,b,c,f,g,h)
#11
当一个表只有少数几列时,单独创建索引并没有什么严重的错误,但是当表的列很多时,由于存储、维护的原因,不建议单独建索引,很多副作用都是因为存储和维护开销导致的。
谢谢提醒,一定注意
#12
如果是这种:
where a = xx
where b = yy
。。。
那么最好是给a,b,c,d每个字段,分别建立索引。
如果是:where a=xx and b=yy and c = zz
那么可以建立一个索引:create index idx_xxx on 表(a,b,c,d)
既有单独的,也有组合的,组合的多一些,
既有a=x and b=y and c=z
也有b=y and d=m 这样不同字段的组合查询,要给同一个字段建立多个索引吗
这样就得建立多个索引了,比如(a,b,c) ,还有(b,d),建立2个索引
那像 where a=x and b=y and c=z order by f,g,h这样的
排序字段是单独建立索引还是和条件字段一起组合建立索引呢
可以建立索引:
(a,b,c,f,g,h)
收到,谢谢
#13
如果你不知道怎么建,可以把所有索引去掉(可以先保留索引的定义),然后在查询界面右键→【在数据库引擎优化顾问中xxx】那个,然后直接点开始分析,应该会有一些建议,不过仅供参考