为什么我的MySQL搜索需要这么长时间?

时间:2017-05-13 17:30:51

标签: mysql database apache

我有一个大约有1.5亿行的MySQL表。当我用一个子句执行搜索时,它需要大约1.5分钟来获得结果。为什么需要这么长时间?我在virtualbox中运行debian,有2个CPU内核和4GB内存。我正在使用MySQL和apache2。

我对此有点新意,所以不知道提供更多信息。

1 个答案:

答案 0 :(得分:1)

在MySQL或任何其他关系数据库管理系统(RDBMS)等数据库中进行搜索,或者更确切地说查询,会受到许多性能因素的影响,包括:

  1. WHERE子句的结构和支持它的索引
  2. 争用系统资源,如内存和CPU
  3. 检索的数据量及其传送方式
  4. 每个人都有一些快速的胜利和策略:

    WHERE子句的结构和支持它的索引

    按顺序排序WHERE子句,从左到右按最大限度减少结果。此外,使用Indexes并将这些索引与WHERE子句中这些列的顺序对齐。如果您使用SELECT * FROM TABLE WHERE SomeID = 5 AND CreatedDate > '10-01-2015'搜索大型数据库,请确保按照最有意义的顺序列出了SomeIDCreatedDate列的索引。如果SomeID是一个非常独特的列,或者可能具有远小于CreatedDate > '10-01-2015'的结果,那么您应该按该顺序创建查询,并使用相同顺序的列创建索引。

    争用系统资源,如内存和CPU

    您使用的是不断更新的表格吗?有交易数据库(OLTP)和用于分析的数据库(OLAP)。如果您正在不断更新正在更新的表格,那么对于包括您自己在内的所有人来说,可能会减慢速度。请记住,您是环境中的公民,因此您需要尊重其他用例。这包括了解系统的使用方式,可用资源以及确保您的查询将如何影响他人。

    检索的数据量及其传送方式

    即使是最好的查询也无法逃避将数据从一个地方传输到另一个地方所需的时间。您可以优化RDBMS的设置,具有令人难以置信的带宽等,但许多因素包括磁盘IOPS,网络带宽等。人。所有这都会影响到做生意的成本。确保您使用正确的协议进行传输,拥有良好的磁盘IOPS以及围绕MySQL的所有最佳实践。

    最后的一些想法:

    • 如果您正在使用AWS并在云中托管数据库,那么您可以 考虑使用Amazon Aurora,这是一个与MySQL兼容的RDBMS 这比MySQL快得多。