日期:2014-05-19  浏览次数:20510 次

关于数据库索引的问题,超简单,弱弱的问?
我以前好象在哪篇文章上看过,如果一个字段的取值只有几种,那么就不要做索引。

我现在的数据库设计里有很多Bit类型和SmallInt类型的字段,这些字段取值都只有几种----但是搜索几乎是每次都用到,是不是也不要做索引?

谢谢指点。

------解决方案--------------------
帮D
------解决方案--------------------
看看不做和做哪個效率高就用哪個,有時候實踐才是王道
------解决方案--------------------
下面的表总结了何时使用聚集索引或非聚集索引(很重要):

动作描述 使用聚集索引 使用非聚集索引

列经常被分组排序 应 应
返回某范围内的数据 应 不应
一个或极少不同值 不应 不应
小数目的不同值 应 不应
大数目的不同值 不应 应
频繁更新的列 不应 应
外键列 应 应
主键列 应 应
频繁修改索引列 不应 应

可以通过例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。
------解决方案--------------------
一般情況下bit類型(如:性別,只有男女兩個選項)不用做索引的

效率高低還是自己試一下吧,二樓說得對實踐出真知
------解决方案--------------------
路过
------解决方案--------------------
不做索引,提高硬件,一样跑得飞快
------解决方案--------------------
不做索引,提高硬件,一样跑得飞快
-------------------------------------------
这位更是高人。
呵呵。。。。
------解决方案--------------------
大体就是这样,如果有超过表数量10%(好像是这个数据)的数据的话,就会采用表扫描的方式


------解决方案--------------------
up
------解决方案--------------------
playwarcraft(时间就像乳沟,挤挤还是有的) ( ) 信誉:100 Blog 2007-3-15 8:39:24 得分: 0



看看不做和做哪個效率高就用哪個,有時候實踐才是王道




------解决方案--------------------
比如有一个表有100w条记录,如果bit=0的纪录很少,假设100条

select * from tb where bit =0 这个索引肯定比全表扫描快很多

关键还是看你的数据和常用的查询
------解决方案--------------------
http://blog.csdn.net/bugchen888/archive/2005/11/10/526591.aspx
------解决方案--------------------
wangdehao(找找找(现在很幸福)) ,好像是5%,我也记得不是很清楚了
------解决方案--------------------
记下
------解决方案--------------------
Select * From Table Where TypeID=1 or TypeID=2 or TypeID=3
这个语句的数据量不会小,我还要做分页存储过程的呢。怎么办?
-----------------
数据量不会少?那表扫描未必比3次索引效率差,得看你的数据了