私は高度なクエリを初めて使用するので、概念的に何か間違っている可能性があります。データベースに 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;
http://sqlfiddle.com/#!2/cbbda/28にサンプル データセット (数レコードのみ) を投稿しました。
sqlfiddle のサンプルは、レコードが少ないため高速に実行されますが、自分のサーバーでレコードを複製しようとすると、クエリはわずか数レコードで高速に実行され、100 万のレコードを追加した後は非常に遅くなりました。
結果をすばやく取得する方法はありますか?