我有一个应用程序运行一个复杂的连接,它在几秒钟内返回。没什么大不了的。但是,当我在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秒??
1条答案
按热度按时间2fjabf4q1#
我找到了答案:内置的
Limit to 500 rows
等,似乎真的很慢,以找出哪500做。当我把它打开时,它跑得很快。这是一个很大的数据集。