sql - 如何优化包含数千个 WHERE 子句的 SQL 查询

标签 sql database oracle

我对一个非常庞大的数据库进行了一系列查询,并且我在 WHERE 子句中有数十万个 OR。优化此类 SQL 查询的最佳和最简单方法是什么?我找到了一些关于创建临时表和使用连接的文章,但我不确定。我是正式 SQL 的新手,一直在将一个结果剪切并粘贴到另一个。

SELECT doc_id, language, author, title FROM doc_text WHERE language='fr' OR language='es'
SELECT doc_id, ref_id FROM doc_ref WHERE doc_id=1234567 OR doc_id=1234570 OR doc_id=1234572 OR doc_id=1234596 OR OR OR ...
SELECT ref_id, location_id FROM ref_master WHERE ref_id=098765 OR ref_id=987654 OR ref_id=876543 OR OR OR ...
SELECT location_id, location_display_name FROM location
SELECT doc_id, index_code, FROM doc_index WHERE doc_id=1234567 OR doc_id=1234570 OR doc_id=1234572 OR doc_id=1234596 OR OR OR x100,000

这些未优化的查询每个可能需要超过 24 小时。干杯。

最佳答案

我想我刚刚回答了我自己的问题......嵌套表!

SELECT doc_text.doc_id, doc_text.language, doc_text.author, doc_text.title, doc_ref.ref_id, ref_master.location_id, location.location_display_name, doc_index.doc_id, doc_index.display_heading
FROM DOC_TEXT, DOC_REF, REF_MASTER, LOCATION, DOC_INDEX
WHERE
    doc_text.language='fr' OR doc_text.language='es'
AND
    doc_text.doc_id=doc_ref.doc_id
AND
    doc_ref.doc_id=ref_master.ref_id
AND
    ref_master.location_id=location.location_id
AND
    doc_text.doc_id=doc_index.doc_id

关于sql - 如何优化包含数千个 WHERE 子句的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668657/

相关文章:

php - Ajax 调用不填充表

docker中的Oracle xe 11g,在ubuntu上重新启动docker后创建的用户丢失

sql - 为什么在使用 regexp_replace 时每个字符前后都会出现空格?

php - 具有特定用户权限的 Cakephp ACL

Oracle SQLPLUS - 当假脱机超过 50,000 条记录时,如何仅输出一次 header ?

java - hibernate 查询语法异常

mysql - 数据应根据查找表进行替换

sql - 为大型 Web 应用程序选择什么数据库策略

mysql - 其他事件之后发生的特定项目的特定事件列表

database - 从多个可能的外部表中选择一个的数据库设计