你能说出SQL聚集索引和非聚集索引的区别吗?

发表于:2011-4-25 10:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:踏雪寻觅    来源:51Testing软件测试网采编

  其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然。造成这种情况的主要原因我觉的是行业原因,有很多公司都有自己的DBA团队,他们会帮助你优化SQL,开发人员即使不懂优化问题也不大,所以开发人员对这方面也就不会下太多功夫去了解SQL优化,但如果公司没有这样的DBA呢,就只能靠程序员自己了。 最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别。

  大家可能认为这个问题难度不大,认为太熟悉了,也许不会感兴趣,但你真能说清楚吗?其实要想说明白这两者的差别也不是三两句就说的清的,那天我也是觉的这问题太泛了,就随便说了其中的两个区别:

  1、聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个,这个跟没问题没差别,一般人都知道。

  2、聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续,这个大家也都知道。

  上面的两点从大的方面讲都是讲的通的,后面我们继续探讨,举一个实际点的例子,一个学生表student,里面是学生号id,学生姓名,学生所在城市ID,学生成绩(总分)。

  问:如果想按姓名查询,如何做优化?

  答:在姓名字段上建立索引。

  问:建立什么类型的索引?

  答:建立非聚集索引。

  问:为什么?

  答:一般有范围查询的需求,可以考虑在此字段上创建聚集索引。

  问:学分有重复性,在学分字段上创建聚集索引能行吗?

  ....沉思,不能创建吗?之前的项目好像真这样做过,答:应该可以吧。

  问:聚集索引的约束是什么?

  答:唯一性啊?

  问:既然是唯一性,那么学分字段上还能创建聚集索引吗?

  ....再次沉思,应该可以啊,但索引的约束又怎么说呢?答:应该可以的,以前用过。

  我自认为是对数据库索引知识有一定研究的,但可能是有两年没实际接触SQL的原因,一时还真想不出具有说服力的解释,朋友们看到这能解答我的问题吗?

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号