【问题标题】:Explain MySQL query without changing row_count() from previous query解释 MySQL 查询而不更改之前查询的 row_count()
【发布时间】:2018-01-02 01:56:11
【问题描述】:

在应用程序中,有时查询很慢,我会在事后“解释”它们(如果它们很慢)并记录下来,这样我就可以随着时间的推移改进应用程序。

但是,如果我在之后运行“解释”,row_count() 不再反映受原始查询影响的行数,这是我不想要的。有没有办法运行解释查询(或任何查询),而不更改 row_count()?

注意:我目前正在做的是打开一个单独的数据库链接,并使用该链接进行解释。这行得通,但我无法以这种方式解释使用临时表的查询。我正在寻找一种不同的解决方案来保留 row_count() 并使用临时表。

【问题讨论】:

    标签: mysql database-performance rowcount


    【解决方案1】:

    捕获row_count() 到一个变量中,如果您以后需要它。无论如何,您可能应该这样做,因为此值的有效性范围非常有限。

    该值与特定连接相关联,并在您执行的每个查询时重置...并且EXPLAIN ... 是一个查询。

    没有办法改变这种行为。

    【讨论】:

    • 您的回答是我最初的想法,但是在应用程序的各个地方(不是我写的)都有“select row_count()”硬编码;任何改变都会打破这些。我考虑过在数据库中做一些名义上的事情,以便在解释查询之后将 row_count() 更改回原始值,但这充其量只是一个 hack。
    【解决方案2】:

    重新排列你的代码...

    SELECT ...
    get ROW_COUNT ...
    EXPLAIN SELECT ...
    

    还要注意EXPLAIN's“行”列是一个近似值;它很少匹配ROW_COUNT()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      相关资源
      最近更新 更多