我是高级查询的新手,所以我可能有一些概念上的错误,因为当数据库有超过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上的示例运行速度很快,因为只有少量记录,但我尝试在我自己的服务器上复制记录,查询只用几条记录快速运行,而且在我添加了一百万条记录后速度极慢.
有没有办法快速获得我的结果?
我不这么认为 - 就按原样使用这张表,我怀疑您是否会在所有这些都LIKE在上面的情况下使其运行得更快。这些必须运行很多次。
abc_like_yellow如果这些值是固定的,那么您可以将新列添加到名为和等的表中abc_like_spork,并一次性填充这些值,然后您可以轻松地查询该列。
但如果您尝试动态地执行此操作,您可能会运气不佳。
| 归档时间: |
|
| 查看次数: |
10621 次 |
| 最近记录: |