我创建了一个表("文本"表),用于存储扫描文档中的ocr文本。该表现在有100,000多条记录。它为文档中的每个页面存储单独的记录。我最初设置了这个表,所以它存储了文件'标题和它对每个记录的位置,这显然是糟糕的设计,因为信息被重复许多记录。我随后创建了一个单独的表,现在只为每个文档存储一条记录("文档"表)。原始表仍包含文档中每个页面的记录,但现在唯一的列是文档表中的ocr文本和文档记录的id。
文件表有一列" total_pages"。我正在尝试使用以下查询更新此值:
UPDATE documents SET total_pages=(SELECT Count(*) from texts where texts.docs_id=documents.id)
这似乎需要永远执行,我不得不在几次崩溃。文件表中有超过8000条记录。
我通过将查询限制为仅一个文档来测试查询
UPDATE documents SET total_pages=(SELECT Count(*) from texts where texts.docs_id=documents.id and documents.id=1)
这最终仅使用一条记录,但执行需要很长时间。我猜我的完整查询需要一些优化!非常感谢任何帮助。
答案 0 :(得分:0)
这是您的查询:
UPDATE documents
SET total_pages = (SELECT Count(*)
from texts
where texts.docs_id = documents.id)
对于性能,您需要texts(docs_id)
上的索引。这可能会解决您的性能问题。实际上,它可能使得不必将此值存储在主表中。
如果您决定存储计数,请确保将值保持最新。这通常需要一个触发器来处理插入和日期(如果doc_id
更改,可能需要更新)。