不是添加聚集索引有这么一条规则么?:既不能绝大多数都相同,又不能只有极少数相同
那么。unique clustered是干嘛用的?岂不是违反了上述规则?还是说知识有那么个东西 但没有用的必要请大神说下.
  Q1:unique clustered index在什么情况下使用?还是没有用的必要。
  Q2:unique index 在什么情况下使用最好。
  Q3:还有个问题想顺便问问.
      比如说前台是一个高级查询吧。可以根据姓名、性别、年龄等组合查询User表,但也可以只使用其中的一两个;这就需要拼接Sql语句
      if(userName !="") 
            sql += "userName=@userName";
      else if(sex!="")
            sql += "sex=@sex";
      ......
这种情况下是不是该放弃使用索引?PS:先在此谢过。

解决方案 »

  1.   

    不是大神1 好像就是主键了
    2 唯一性约束?
    3 name是精确匹配的话,name做索引就可以了;经常被查的,加入索引,查询会快,插入修改会慢
      

  2.   

    索引有两类种:cluatered index--聚集索引nonclustered index--非聚集索引如果对一个表创建了主键,那么它默认为clustered index,当然也可以指定它为nonclustered index如果说聚集索引不在主键字段上,那么是允许不同行的同列出现相同的值,这个时候如果对某个非主键字段创建一个unique clustered index,那么也是不允许在这个字段中出现重复值的。这也就是说明了如果一个字段不存在重复值,而且经常作为查询的检索条件,并且被频繁使用,那么可以考虑这个字段加一个unique clustered index。而unique index很少单独使用的
      

  3.   

    噢。谢谢先。 
    那clustered和unique clustered相比 除了重复值不算  在资源消耗或效率上有很大的区别吗?
      

  4.   


    我的意思是不能确定哪个条件被选择 name sex....都是前台选择的  可选一个 可选多个 还可以不选
    而且都是精确匹配的
      

  5.   

    添加聚集索引有这么一条规则么?:既不能绝大多数都相同,又不能只有极少数相同 ?  你从哪里听到的这句话?这句话是不对的。
    对于绝大多数值都相同的列来说,添加任何索引都可能是错误的,不但不能提高查询效率,还会造成系统性能下降,甚至数据无法访问。但是对于唯一性比较高的列来说,如果经常使用改列作为查询条件的话,建立索引是个比较明智的做法。但是聚集索引非常特殊,建立聚集索引时要特别考虑业务的情况。
    建议你先看看索引的工作原理。也可以参考下这篇文章:
    http://blog.csdn.net/yongsheng0550/article/details/3599563