MySQL在非主键列上建立索引

时间:2013-06-18 17:31:40

标签: mysql database indexing primary-key

我在一个非常大的桌面上运行一些MySQL查询(不是在Facebook规模上,但是大约一百万行),我发现它们非常慢。我怀疑的原因是我在id字段上查询,但id尚未被声明为主键,也没有声明索引。

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

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

1 个答案:

答案 0 :(得分:1)

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

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