这是我要运行的查询:
UPDATE files set refcount=
(
SELECT count(*)
FROM comments WHERE data=files.id
)
WHERE id=?;
问题是,comments.data是一个文本列(出于其他原因)。所以我需要将files.id 转换为 STRING 而不是它是什么(一个 INT),否则不会使用comments.data索引。
例如,此查询运行良好:
SELECT count(*) FROM comments WHERE data='1234';
但这需要永远(因为它不能使用索引,评论有 10M 行):
SELECT count(*) FROM comments WHERE data=1234;
也许我需要使用@vars 之类的?我试着把它放在引号中,但我认为它使用了文字“files.id”。
UPDATE files set refcount=
(
SELECT count(*)
FROM comments WHERE data='files.id'
)
WHERE id=?;