我刚刚在数据库的表中添加了另一个索引,但现在网站崩溃了,查询被锁定而未解锁,并且查询未执行(我可以在进程列表中看到它们,它们通常需要不到一秒钟的时间来执行,但现在它们大约需要 600 秒甚至更长时间等)。
我没有更改网站上的任何内容,只是添加了索引。这怎么可能呢?之前有人遇到过类似的问题,能帮我解决一下吗?
更新: 我不太清楚发生了什么,但添加索引后,一个特定的查询确实很慢(即使这个索引对于这个特定的查询来说不需要/使用)。即使删除索引也无助于加快查询速度。之后,我从这个表中删除了所有索引,然后一个接一个地重新添加索引,这样做之后查询又快了。不知道这是否对任何人都有帮助,但这为我解决了这个问题。
答案1
找到有问题的查询,比如
select * from tableName where user='bob' order by ts;
然后添加EXPLAIN
在前面
EXPLAIN select * from tableName where user='bob' order by ts;
从那里,您可以看到索引是否正在使用,以及它需要扫描多少个表以及它返回了多少个表。我的猜测是这样的……您之前有一个索引,现在您创建了这个更糟糕的新索引,它不知何故使用了那个索引。
答案2
您没有提供任何有关数据库架构、添加的索引、正在使用的数据库引擎、正在运行的查询的详细信息,以及性能变化是否会影响所有查询 / 使用新索引的查询 / 使用修改后的表的查询 / 仅影响某些查询。所以很难说。
添加索引的唯一原因是:
1)加快速度
2)强制唯一约束
(再次,你没有说你的索引是用来做什么的)。
由于它显然未能加快速度,所以您应该删除索引并查看其正常服务是否恢复 - 但您可能需要在执行此操作之前查看如何收集和分析统计数据。