これは私が実行しようとしているクエリです:
UPDATE files set refcount=
(
SELECT count(*)
FROM comments WHERE data=files.id
)
WHERE id=?;
問題は、comments.dataがテキスト列であることです (他の理由による)。したがって、 files.idを (INT) ではなく STRING としてキャストする必要があります。そうしないと、 comments.dataインデックスが使用されないためです。
たとえば、次のクエリは正常に実行されます。
SELECT count(*) FROM comments WHERE data='1234';
しかし、これには永遠に時間がかかります (インデックスを使用できないため、コメントには 1,000 万行あります)。
SELECT count(*) FROM comments WHERE data=1234;
おそらく、@vars などを使用する必要がありますか? 引用符で囲んでみましたが、それは文字通りの「files.id」を使用していると思います。
UPDATE files set refcount=
(
SELECT count(*)
FROM comments WHERE data='files.id'
)
WHERE id=?;