2012-07-31 177 views
0

我有一个mysql数据库。当我在表中输入数据[T_ID,T_Name,T_AGE](比如10k行左右)时,数据库是否会为该表隐式创建索引。如果是这样,那么如果我使用“创建索引..创建索引我自己会说什么T_ID”会发生什么。这两个索引是否存在,或者哪一个会实际存在。创建数据库索引Vs用户为表创建索引

回答

1

如果您指定primary key(t_id)那么它会自动创建一个索引,并且您将无法在同一列上创建另一个索引。

为什么你不试试这些情况?

+1

是的,我收到消息说“这样的列表已经编入索引”(Oracle)。现在我得到了结果。如果表具有主键,则不需要定义列并给出索引。 – Amarnath 2012-07-31 06:46:55

+0

是的,你得到它:) – 2012-07-31 07:24:11

+0

我读到,如果索引是排序数据库搜索使用二进制搜索。但是,如果我声明主键和主键列没有排序,那么如何发生seach ..请清除我这一个太.. :) – Amarnath 2012-07-31 07:57:15

0

它依赖于MySQL中的存储引擎。

InnoDB存储引擎的情况下,如果你不指定任何PRIMARY KEYID列,然后在内部会自动创建一个clustered index。见here

如果是MyISAM存储引擎,您可以在ID字段中明确指定PRIMARY KEY

在这两种情况下,二级索引都是可选的。

+0

确实。这里的关键点是这两个数据库之间的默认主键索引行为存在差异。在一天结束时,您应该在创建之后检查表格元数据,看看索引是否符合您的期望。 (例如,通过squirrelSQL中的索引选项卡) – Codek 2012-07-31 07:23:19