建表必须建索引吗?

时间:2022-07-14 08:36:14
比如建个 yh表  字段 yh_h  yh_mc   yh_xb  yh_dw

主键自增ID 是yh_h 

其他 yh_mc   yh_xb  yh_dw    在都要查询的情况下
,都必须建立索引吗?

17 个解决方案

#1


数据少就没必要加。
数据多的时候味了加快查询的速度,需要添加索引。

#2


不是必须的。根据具体使用来看。

#3


直接在企业管理器,右键表-管理索引-新建选个字段 这样就建立索引?

多个表的索引呢?
比如a,b表
a.id =b.id 

#4


xue xi 

#5


按实际应用,
这里举个例子:
如果某table有10条数据而且10年才会增到20条,那么不用建,因为类似只读的数据比较快。
如果某table有100000条数据,每次读取时都要取其中的88888条,那么也不用建,因为耗时基本上差不多。
反之
100000条数据,要取其中第88888条,那么索引就非常重要。

语文很差,就这样理解吧。

#6


引用 3 楼 soft923 的回复:
直接在企业管理器,右键表-管理索引-新建选个字段 这样就建立索引?

多个表的索引呢?
比如a,b表
a.id =b.id
多表索引?
猜想您是在指外键,通常用在约束上,保证数据完整性。
建议了解聚集索引和非聚集索引的概念和用法。

#7


建议至少要有主键。有主键则有索引。

#8


引用 7 楼 acmain_chm 的回复:
建议至少要有主键。有主键则有索引。
建表必须建索引吗?

#9


看你处理的数据量  具体情况具体分析.

#10


引用 6 楼 claro 的回复:
多表索引?
猜想您是在指外键,通常用在约束上,保证数据完整性。
建议了解聚集索引和非聚集索引的概念和用法。


对 这多表约束  要做吗?
 

#11


引用 7 楼 acmain_chm 的回复:
建议至少要有主键。有主键则有索引。


已经有主键yh_h了
 那表有5千条数据,查询其中一条数据 要加其他字段的索引吗?

#12


引用 11 楼 soft923 的回复:
引用 7 楼 acmain_chm 的回复:
建议至少要有主键。有主键则有索引。


已经有主键yh_h了
那表有5千条数据,查询其中一条数据 要加其他字段的索引吗?
主键已经存在聚集索引了。如果还有常用的查询字段,可以做。

#13


引用 12 楼 claro 的回复:
 主键已经存在聚集索引了。如果还有常用的查询字段,可以做。


我一般都是 select * from test where id='1';

这样要加吗?  还有多表的约束  要加吗?

#14


看具体情况创建索引!这需要对数据库进行物理结构设计,归属数据库系统的系统设计范畴....

#15


微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)…… 
  (一)深入浅出理解索引结构

  实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:

  其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按 照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个 字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正 文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。

  我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

  如果您认识某个字,您可以快速地从自典中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要 查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的 排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页 码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实 际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的 结果,然后再翻到您所需要的页码。

  我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

  通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。

  进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。

  (二)何时使用聚集索引或非聚集索引

  下面的表总结了何时使用聚集索引或非聚集索引(很重要)。


动作描述                               使用聚集索引    使用非聚集索引 
外键列                                    应                      应 
主键列                                    应                      应 
列经常被分组排序(order by)             应                      应 
返回某范围内的数据                        应                     不应 
小数目的不同值                            应                     不应 
大数目的不同值                           不应                     应 
频繁更新的列                             不应                     应 
频繁修改索引列                           不应                     应 
一个或极少不同值                         不应                    不应

  事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把 聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。

#16


引用 14 楼 happycell188 的回复:
看具体情况创建索引!这需要对数据库进行物理结构设计,归属数据库系统的系统设计范畴....

我就是要进行数据库系统的系统设计....
以前都还不加主键,觉得主键麻烦....
上次看个帖子 在说数据库设计得烂
想想自己也是  系统就个主键  其他什么都没有...

#17


根据数据的量而定

#1


数据少就没必要加。
数据多的时候味了加快查询的速度,需要添加索引。

#2


不是必须的。根据具体使用来看。

#3


直接在企业管理器,右键表-管理索引-新建选个字段 这样就建立索引?

多个表的索引呢?
比如a,b表
a.id =b.id 

#4


xue xi 

#5


按实际应用,
这里举个例子:
如果某table有10条数据而且10年才会增到20条,那么不用建,因为类似只读的数据比较快。
如果某table有100000条数据,每次读取时都要取其中的88888条,那么也不用建,因为耗时基本上差不多。
反之
100000条数据,要取其中第88888条,那么索引就非常重要。

语文很差,就这样理解吧。

#6


引用 3 楼 soft923 的回复:
直接在企业管理器,右键表-管理索引-新建选个字段 这样就建立索引?

多个表的索引呢?
比如a,b表
a.id =b.id
多表索引?
猜想您是在指外键,通常用在约束上,保证数据完整性。
建议了解聚集索引和非聚集索引的概念和用法。

#7


建议至少要有主键。有主键则有索引。

#8


引用 7 楼 acmain_chm 的回复:
建议至少要有主键。有主键则有索引。
建表必须建索引吗?

#9


看你处理的数据量  具体情况具体分析.

#10


引用 6 楼 claro 的回复:
多表索引?
猜想您是在指外键,通常用在约束上,保证数据完整性。
建议了解聚集索引和非聚集索引的概念和用法。


对 这多表约束  要做吗?
 

#11


引用 7 楼 acmain_chm 的回复:
建议至少要有主键。有主键则有索引。


已经有主键yh_h了
 那表有5千条数据,查询其中一条数据 要加其他字段的索引吗?

#12


引用 11 楼 soft923 的回复:
引用 7 楼 acmain_chm 的回复:
建议至少要有主键。有主键则有索引。


已经有主键yh_h了
那表有5千条数据,查询其中一条数据 要加其他字段的索引吗?
主键已经存在聚集索引了。如果还有常用的查询字段,可以做。

#13


引用 12 楼 claro 的回复:
 主键已经存在聚集索引了。如果还有常用的查询字段,可以做。


我一般都是 select * from test where id='1';

这样要加吗?  还有多表的约束  要加吗?

#14


看具体情况创建索引!这需要对数据库进行物理结构设计,归属数据库系统的系统设计范畴....

#15


微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)…… 
  (一)深入浅出理解索引结构

  实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:

  其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按 照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个 字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正 文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。

  我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

  如果您认识某个字,您可以快速地从自典中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要 查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的 排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页 码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实 际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的 结果,然后再翻到您所需要的页码。

  我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

  通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。

  进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。

  (二)何时使用聚集索引或非聚集索引

  下面的表总结了何时使用聚集索引或非聚集索引(很重要)。


动作描述                               使用聚集索引    使用非聚集索引 
外键列                                    应                      应 
主键列                                    应                      应 
列经常被分组排序(order by)             应                      应 
返回某范围内的数据                        应                     不应 
小数目的不同值                            应                     不应 
大数目的不同值                           不应                     应 
频繁更新的列                             不应                     应 
频繁修改索引列                           不应                     应 
一个或极少不同值                         不应                    不应

  事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把 聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。

#16


引用 14 楼 happycell188 的回复:
看具体情况创建索引!这需要对数据库进行物理结构设计,归属数据库系统的系统设计范畴....

我就是要进行数据库系统的系统设计....
以前都还不加主键,觉得主键麻烦....
上次看个帖子 在说数据库设计得烂
想想自己也是  系统就个主键  其他什么都没有...

#17


根据数据的量而定