日期:2014-05-17  浏览次数:20493 次

问个sql 主键 索引对数据影响的小问题
有个表是没有主键和索引,查询时使用的查询条件也只是“内容”这个字段。

表如:
code title content
 100  ttt   ccc
 100  ttt   cccc
 101  tt2   cccc2

1.为什么说每个表都要有索引和主键;问下如果我要加主键和索引理论上有没什么影响。
2.select * from newsKind where code='100' order by code desc;请问这个语句的order by用的code来排序算不算也是索引。

------解决方案--------------------
1.为什么说每个表都要有索引和主键;问下如果我要加主键和索引理论上有没什么影响。
不是“都要”,主键能保证数据的唯一性,而索引能给性能带来好处。加主键的话要保证列没有重复数据,加索引的话没有什么限制
2.select * from newsKind where code='100' order by code desc;请问这个语句的order by用的code来排序算不算也是索引。
如果code有索引,也会借用索引
------解决方案--------------------
sqlserver的主键默认就带有聚集索引,聚集索引能借用预排序功能,在某些情景下能减少order by的开销。这句:select * from newsKind where code='100' order by code desc; 如果code上有聚集索引,能减少order by的开销,但是如果非必要的话,不要用select *
------解决方案--------------------
另外,如何建索引,要看你的查询是如何操作表中的数据,就拿select code from newsKind where code='100' order by code desc;这个脚本,可以在code上建聚集索引,但是不一定是主键。注意我把*改成code了
------解决方案--------------------
加了查询快啊。
索引主要是为了效率,不加也可以啊。只要你能受得了查询慢。
------解决方案--------------------
加了不一定快,还要看数据的选择度
------解决方案--------------------

1、主键是为了防止数据的重复,而索引是为什么加快查询的速度。

另外,索引又分为:聚集索引 和 非聚集索引。

为了提高性能,建议创建:聚集索引,这样就使得 数据就是这个聚集索引。
------解决方案--------------------

2.你的查询:这个语句的order by用的code来排序,只是排序,不是索引。
------解决方案--------------------
引用:
Quote: 引用:

加了不一定快,还要看数据的选择度


如果我加了一个id设为主键,但实际上查询时从来没用过这个主键id, 主键自身带有索引,那这个表算得上优化吗
这个不算优化,但是算得上“管理”
------解决方案--------------------
引用:
Quote: 引用:

加了不一定快,还要看数据的选择度


如果我加了一个id设为主键,但实际上查询时从来没用过这个主键id, 主键自身带有索引,那这个表算得上优化吗


那就意义不是很大了。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

加了不一定快,还要看数据的选择度


如果我加了一个id设为主键,但实际上查询时从来没用过这个主键id, 主键自身带有索引,那这个表算得上优化吗


那就意义不是很大了。

如果我这个表最多的数据量不会超过100条,那我有没必要去弄这个索引,如果弄了影响大不大。


可以不建立索引,因为数据量比较小。