新学者该怎么确定给哪些列建索引,建什么索引?求高手指导
解决方案 »
- sqlserver2005查询数据进入数据库时间
- sql怎么写
- 会着不难,如何实现阶段查询?
- 更改了所有者,为什么INNER JOIN用不了了?
- sql的1433端口频繁遭到一个印度IP的攻击,该怎么办?
- 未能加载文件或程序集“Microsoft.SqlServer.Diagnostics.STrace, Version=10.0.0.0, Culture=neu
- 【求助】导入excel问题.很奇怪!
- 请教 mssql 数据表 如何合理创建索引,是分开建还是合在一起建,见下面条件
- 首先让缅怀地震灾难中的同胞,再请教大家一下,该查询结果如何得到,
- 如何统计出一个数字字符串中由几个数字字符组成?
- update一个表的一表,以另一表为参数,哪错了
- 为什么有错误啊,上午还能用下午就不行了
1.不宜创建索引的情形
(1)经常插入,修改和删除的表
(2)数据量比较小的表,因为查询优化器在搜索索引时所花费的时间可能会大于遍历全表的数据所需要的时间2.适合创建索引的情形
(1)为where子句中出现的列创建索引
(2)创建组合索引
(3)为group by 子句中出现的列创建索引3.聚集索引的设计原则
(1)该列的数值是唯一的或者很少有重复的记录
(2)经常使用between ...and..按顺序查询的列
(3)定义identity的唯一列.
(4)经常用于对数据进行排序的列.---无法使用索引的select语句
1.对索引列使用了函数,如:
select * from tb where max(id)=1002.对索引列使用了'%xx',如:
select * from tb where id like '%1'
需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如
select * from tb where id like '1%'就可以使用索引3.在where子句中对列进行类型转换(其实也是使用到了函数)4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列;
select * from tb where id='1' and col1='aa'
select id,sum(col1) from tb group by id
select * from tb where id='2' and col2='bb'
则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序5.在where 子句中使用in关键字的某些句子
当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引
如:
select
*
from
ta
where
id
in
(select id from tb where ....)--这样可以用到索引
select * from tb where id in('1','2')
设计索引实现索引优化索引
http://technet.microsoft.com/zh-cn/library/ms189271%28SQL.90%29.aspx
2005 可以5.在where 子句中使用in关键字的某些句子
当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引
如:
select
*
from
ta
where
id
in
(select id from tb where ....)
这个F姐姐测试过?
确定不走索引?