为什么mysql工作台执行查询的速度比我的应用程序慢得多?

btqmn9zl  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(296)

我有一个应用程序运行一个复杂的连接,它在几秒钟内返回。没什么大不了的。但是,当我在workbench 8.0.12中运行同样的查询时,需要一分钟以上的时间。连接字符串相同。
这个帖子没有帮助,似乎是另一个问题。
我的应用程序是使用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秒(我已经逐行检查了代码并验证了这一点),而在workbench中运行超过60秒??

2fjabf4q

2fjabf4q1#

我找到了答案:内置的 Limit to 500 rows 等,似乎真的很慢,以找出哪500做。当我把它打开时,它跑得很快。这是一个很大的数据集。

相关问题