我在一个非常大的桌面上运行一些MySQL查询(不是在Facebook规模上,但是大约一百万行),我发现它们非常慢。我怀疑的原因是我在id
字段上查询,但id
尚未被声明为主键,也没有声明索引。
我无法将id
字段设置为主键,因为它不是唯一的,尽管它的基数非常接近1.在这种情况下,如果我执行alter table
来添加索引id
字段,它是否应该提高查询速度,因为它不是主键?
假设确实如此,索引完全开发需要多长时间才能使查询快速执行?我的意思是,在执行alter table
后出现提示的那一刻,或者即使提示出现,索引构建将在内部进行相当长的一段时间? (我在做之前会问,因为我不确定在非唯一字段上声明索引是否会破坏数据库)
答案 0 :(得分:1)
任何索引都会加快与相应列匹配的查询。在这方面,主键和其他索引之间没有显着差异。
执行ALTER TABLE
查询时会立即创建索引。当提示返回时,索引就在那里并将被使用。发生这种情况时没有腐败。