【问题标题】:Why does MySQL Workbench execute a query so much slower than my app?为什么 MySQL Workbench 执行查询比我的应用程序慢得多?
【发布时间】:2018-12-11 23:24:06
【问题描述】:

我有一个运行复杂连接的应用程序,它会在几秒钟内返回。没什么大不了。但是,当我在 Workbench 8.0.12 中运行相同的查询时,需要一分钟多的时间。连接字符串相同。

This post 没有帮助,似乎是另一个问题。

我的应用程序是使用 MySQL.Data dll 的 .NET。我过去曾多次使用 Workbench,但通常使用 PHP 应用程序。根据多年的经验,我一直看到 Workbench 运行查询的时间与应用运行它的时间大致相同。

这是我的查询:

SELECT 
    model.Code as ModelCode, 
    prod.parts_group as PartsGroup, 
    rules.id AS ID, 
    rules.Code as ConstraintName, 
    REPLACE(REPLACE(REPLACE(REPLACE(rules.statement, '''', ''), ' me.', ''), '}and ', '} and '), '}or ', '} or ') as Statement, 
    ifnull(rules.priority,5) AS Priority, 
    model.serie_id AS SeriesID
FROM 
    toy_product_constraint as rules
    INNER JOIN toy_product as prod ON rules.product_id = prod.id
    INNER JOIN toy_product_model as model ON prod.model_id = model.id
    JOIN ModelImport mi ON model.code = mi.ModelCode
WHERE
    rules.statement <> 'TRUE'
    AND rules.market_id is null
    AND rules.statement not like 'hasSDR(true)%'
    AND rules.statement like 'SPECOPTION{00%'

最后 3 个 where 子句似乎增加了 99% 的额外查询时间:

AND rules.market_id is null
AND rules.statement not like 'hasSDR(true)%'
AND rules.statement like 'SPECOPTION{00%'

没有最后 3 个,查询将在 Workbench 中运行 1 秒。 加上最后 3 个在 Workbench 中需要超过 60 秒。我们可以谈论索引和其他事情,但真正的谜团是为什么在我的应用程序中,相同的查询在不到 3 秒的时间内运行(并返回记录)(我已经逐行遍历代码并验证了这一点)和在工作台上超过 60 秒??

【问题讨论】:

    标签: mysql sql mysql-workbench


    【解决方案1】:

    我找到了答案:内置的Limit to 500 rows 等似乎真的很慢,无法确定要执行哪个 500。当我把它打开时,它跑得很快。这是一个大型数据集。

    【讨论】:

    • 该限制功能使用简单的LIMIT x,y 子句。当您在应用程序中执行相同操作时会发生什么?它会变得同样缓慢吗?如果是这样,服务器有问题。
    • 我遇到了完全相同的问题。更改了查询 > 限制行 > 不限制下的设置。在那之后,将永远挂起的查询现在可以在合理的时间内完成。
    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2017-03-15
    • 2017-08-25
    • 2013-02-24
    相关资源
    最近更新 更多