mysql查询耗时太长

G-J*_*G-J 5 mysql

我是高级查询的新手,所以我可能有一些概念上的错误,因为当数据库有超过100万条记录时,我得到了这个响应,我的查询...

ERROR 2013: Lost connection to MySQL server during query

是! 它实际上需要很长时间才能在它完成之前呕吐.

我的疑问是......

SELECT users.username,
    table_1.field_abc, table_1.field_def,
    table_2.field_ghi, table_2.field_jkl
FROM users
LEFT JOIN table_1 ON table_1.username = users.username
LEFT JOIN table_2 ON table_2.username = users.username
WHERE
    table_1.field_abc REGEXP "(spork|yellow)" OR
    table_1.field_def REGEXP "(spork|yellow)" OR
    table_2.field_ghi REGEXP "(spork|yellow)" OR
    table_2.field_jkl REGEXP "(spork|yellow)"
GROUP BY users.username
ORDER BY
(
    ( CASE WHEN table_1.field_abc LIKE "%spork%" THEN 1 ELSE 0 END ) +
    ( CASE WHEN table_1.field_abc LIKE "%yellow%" THEN 1 ELSE 0 END ) +
    ( CASE WHEN table_1.field_def LIKE "%spork%" THEN 1 ELSE 0 END ) +
    ( CASE WHEN table_1.field_def LIKE "%yellow%" THEN 1 ELSE 0 END ) +
    ( CASE WHEN table_2.field_ghi LIKE "%spork%" THEN 1 ELSE 0 END ) +
    ( CASE WHEN table_2.field_ghi LIKE "%yellow%" THEN 1 ELSE 0 END ) +
    ( CASE WHEN table_2.field_jkl LIKE "%spork%" THEN 1 ELSE 0 END ) +
    ( CASE WHEN table_2.field_jkl LIKE "%yellow%" THEN 1 ELSE 0 END )
)DESC;
Run Code Online (Sandbox Code Playgroud)

我在http://sqlfiddle.com/#!2/cbbda/28发布了一个样本数据集(只有几条记录)

sqlfiddle上的示例运行速度很快,因为只有少量记录,但我尝试在我自己的服务器上复制记录,查询只用几条记录快速运行,而且在我添加了一百万条记录后速度极慢.

有没有办法快速获得我的结果?

Joe*_*nos 0

我不这么认为 - 就按原样使用这张表,我怀疑您是否会在所有这些都LIKE在上面的情况下使其运行得更快。这些必须运行很多次。

abc_like_yellow如果这些值是固定的,那么您可以将新列添加到名为和等的表中abc_like_spork,并一次性填充这些值,然后您可以轻松地查询该列。

但如果您尝试动态地执行此操作,您可能会运气不佳。