日期:2014-05-18  浏览次数:20719 次

基础索引问题??
索引可以提高查询速度,一个有主键,没索引的表,在SQL   Server中主键相当于索引.但是现在如果有一个表不建索引只有主键,主键与查询无关,主键设置为char好,还是int好?   我用同样条件查询的时候那个效率高?   为什么?

------解决方案--------------------
主键与查询无关的话,数据类型无所谓的

------解决方案--------------------
建主键時, 如果表沒有聚集索引, 則主鍵字段也同時建立聚集索引
------解决方案--------------------
.但是现在如果有一个表不建索引只有主键,主键与查询无关,主键设置为char好,还是int好? 我用同样条件查询的时候那个效率高? 为什么?
--------------------------------------------
建立主键的时候,事实上就已经建立了主键索引。建立了索引的表,会稍微占用一定的磁盘空间,但查询速度会快很多。

主键的选择,不是根据数据类型,是根据你的表结构,是否该列需要与其它列关系,该列的值是否唯一。(主键字段必须唯一,否则无法建立)。

如果与数据无关,可使用IDENTITY列做主键。表格设计器中---列属性设为标识列。

------解决方案--------------------
1、查询是跟索引相关的。

2、作为一种约束要保证在作为主键的字段上键唯一索引。

3、聚集索引作为一种非常重要的资源,要加在最有效率的字段上。

对于楼主的问题,主键如果与查询无关,那么配备非聚集唯一索引就可以了,这样的话采用什么数据类型影响不大。如果主键是默认的聚集索引,那么任何查询最终都会通过聚集索引去定位,char带来的存储成本对查询的效率还是有影响的。如果不是特别要求的话,一般建议还是使用逻辑主键比较好,int identity(1,1)。
------解决方案--------------------
主键与查询无关

意味着在检索满足条件的数据时, 主键没有什么有益的作用.

剩下的必须考虑的问题是, 主键影响了什么.
主键一般是聚集的, 聚集的意味着决定了数据的顺序, 并且它本身占用了空间(非叶子层, 叶子层是实际数据空间, 这个空间消耗跟主键没有什么关系了)
这就意味着, 主键越长(长度越长), 非叶子层需要的数据页越多. 数据页多, 数据检索的时候, 就需要读取更多的数据而, 效率肯定有影响啦.


所以, 如果主键是聚集的, 且 char 长度大于 int 时, 效率没有主键在 int 上好
如果主键不是聚集的, 对楼主提出的问题中的效率影响来说, 是没有影响的.