0

我在一个相当大的表上运行一些 MySQL 查询(不是 Facebook 规模,而是大约一百万行),我发现它们非常慢。我怀疑原因是我正在查询一个id字段,但该字段id尚未声明为主键,也未声明任何索引。

我不能将id字段设置为主键,因为它不是唯一的,尽管它的基数非常接近 1。在这种情况下,如果我alter table在字段上添加索引id,是否应该提高查询速度,鉴于它不是主键?

假设确实如此,索引需要多长时间才能完全发展,以便查询开始快速执行?我的意思是,在执行后出现提示的那一刻alter table,还是即使出现提示,索引构建也会在内部进行相当长的一段时间?(我在做之前问过,因为我不确定在非唯一字段上声明索引是否会破坏数据库)

4

1 回答 1

2

任何索引都会加快与相应列匹配的查询。在这方面,主键和其他索引没有显着差异。

ALTER TABLE执行查询时会立即创建索引。当提示返回时,索引就在那里并将被使用。发生这种情况时没有腐败。

于 2013-06-18T17:39:42.567 回答