我正在尝试用MySQL执行一个非常简单的查询。我试图实现的是在1个查询中从2个不同的表中选择一些数据。但是,如果我只从一个表中选择数据,查询运行得很快,但是当我切换到从两个表中选择数据时,它会变得非常慢。
我想实现的查询看起来像这样:
SELECT k.klantId, b.bestelId
FROM klanten k, bestellingen b
WHERE k.klantId=b.klantId AND voornaam LIKE '%henk%'
字符串
上面的查询运行大约需要20秒。
但是当我像这样执行查询时,查询只运行了不到一秒:
SELECT k.klantId
FROM klanten k, bestellingen b
WHERE k.klantId=b.klantId AND voornaam LIKE '%henk%'
型
我还尝试从表'bestellingen'中选择一个不同的列,但这也非常慢。
有没有人知道为什么选择一个额外的字段会这么慢?
--编辑--
我以为我在那里,但现在我正在用更多的列来选择我的表。现在又花了18秒,但也许我的扩展查询做错了什么。有谁知道这有什么问题吗?
SELECT filiaalId, bestelId, k.klantId, totaalPrijs, b.statusId, b.tmInvoer, geprint, verzendwijze, betaalwijze, afhaalpuntId, verzendkosten, betaalwijzeKosten
FROM klanten k LEFT JOIN bestellingen b ON (k.klantId=b.klantId)
WHERE (k.voornaam LIKE '%henk%' OR k.achternaam LIKE '%henk%' OR b.bestelId LIKE '%henk%')
ORDER BY b.tmInvoer DESC
型
2条答案
按热度按时间m528fe3b1#
尝试使用mysql连接,这应该更快。
字符串
您还可以确保两个列
k.klantId
和b.bestelId
已被索引。l0oc07j22#
我知道这是非常晚了你的问题,大约7年,但别人肯定会有这个问题。解决办法很简单。
一旦你“喜欢”,特别是与野生“%”从一个以上的表,你得到一个巨大的缓慢。将“LEFT JOIN”更改为“INNER JOIN”立即解决了这个问题,18秒将增加到0.2秒,但是,如果任何一个表都有另一个表没有的记录,您将错过该结果。
为了保持“左”和移动 lightning 般的速度,你必须减少到一个“喜欢”通过CONCAT。
我的查询是19秒,现在是0.03
更改您的
字符串
TO
型
你现在回到运行ONE like,而不是每次在每个表中查找它,concat给它一个项目来检查。只有当您在所有表中寻找相同的“like”时,这才有效。