我有一个运行复杂联接的应用程序,它在几秒钟内返回。没什么大不了的。但是,当我在 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秒?
答案 0 :(得分:1)
我找到了答案:内置的Limit to 500 rows
等似乎很难确定要执行的500个操作。当我打开它时,它运行很快。这是一个很大的数据集。