无索引, MySQL效能急剧下降(mysql 不用索引)

近来,我所在的公司的MySQL数据库的效能急剧下降,经过一番排查发现是由于无索引所导致的。下面我将介绍我们遇到的问题以及如何解决它。

问题背景

我们的公司有一个非常大的MySQL数据库,用于存储大量的数据。最近我们发现,数据库的效率越来越低,并且查询结果需要更长时间才能显示。我们开始尝试了一些简单的方法,比如增加服务器的内存和CPU。但是,我们很快就发现这并不能解决问题。

问题分析

我们最终找到了一个问题:某些查询没有索引。没有索引,MySQL服务器需要扫描整个表才能找到需要查询的数据,而这会导致查询时间急剧增加。这些查询通常是比较复杂的,关联了多个表。

解决方案

为了解决这个问题,我们需要对数据库中的表增加索引。我们需要确定哪些表需要增加索引,然后添加适当的索引。我们发现,在没有索引的表中,查询时间可以从几分钟甚至几小时降到几秒钟之内。

在我们的抽象精灵平台上,我们使用了以下SQL来找到没有索引的表:

SELECT TABLE_SCHEMA, TABLE_NAME

FROM information_schema.tables t

WHERE TABLE_TYPE = ‘BASE TABLE’

AND NOT EXISTS (

SELECT *

FROM information_schema.statistics s

WHERE s.TABLE_SCHEMA = t.TABLE_SCHEMA

AND s.TABLE_NAME = t.TABLE_NAME

);

下面是一些关于添加索引的建议:

1. 增加索引应该是需要仔细考虑的。在某些情况下,添加索引可能不会提高查询性能,甚至会降低性能。因此,我们需要适当地评估每个查询的开销和效率。

2. 我们应该考虑在最常用的列上添加索引。在大多数情况下,我们应该在主键列和外键列上添加索引。

3. 我们还应该避免过度添加索引。过多的索引会降低查询性能,增加写入操作的时间。

结论

在添加索引后,我们的MySQL效率有了很大的提升。查询时间从几分钟到几小时的时长降低到了几秒钟之内。这说明了添加索引的重要性。我们希望这篇文章能够帮助那些正在遇到类似问题的读者。

代码

下面是一个添加索引的例子:

ALTER TABLE table_name ADD INDEX index_name (column_name);

请注意替换上面的table_name、index_name和column_name为自己的值。


数据运维技术 » 无索引, MySQL效能急剧下降(mysql 不用索引)