我需要在两个条件下加入三个表,还需要在使用sql的地方加入。 像
这样的东西select
t1.id,t1.name,t2.date,t3.hhh
from t1
inner join t2
on t1.id = t2.id
inner join t3
on t1.name = t3.name
where t1.id = 'gggg'
有没有一种有效的方法可以做到这一点?
两行结果需要.492秒。 我需要尽量减少时间。
答案 0 :(得分:0)
你可以试试SQL的左连接版本:
SELECT
t1.id,
t1.name,
t2.date,
t3.hhh
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t1.name = t3.name
WHERE t1.id = 'gggg';
您还需要在PRIMARY KEYS(唯一)和名称,日期等上创建索引以便快速搜索。
e.g。
CREATE UNIQUE INDEX t1_unique_index_id ON t1(id);
CREATE INDEX idx_t1_name ON t1(NAME);
CREATE INDEX t2_unique_index_date ON t2(date);
CREATE INDEX t3_unique_index_hh ON t3(hhh);
答案 1 :(得分:0)
如果您不提供解释计划(最好的选择是获得良好的回复),请检查列是否已编入索引。如果他们不是,以下内容应该有所帮助。
CREATE INDEX t1_idx1 ON t1 (id,name);
CREATE INDEX t1_idx2 ON t1 (name,id);
CREATE INDEX t2_idx1 ON t2 (id,date);
CREATE INDEX t3_idx1 ON t3 (name,hhh);
对WHERE子句中的列建立索引以及连接的列应该有很大帮助。但是,包括SELECT子句中的那些应该通过消除完全访问表的需要来进一步帮助。但需要注意的是,添加索引会降低插入,更新和放大速度。删除和占用空间。
如果在解决索引问题后仍然遇到性能问题,请收集有关表和索引的统计信息。正如Jeffrey Kep建议的那样,你也应该使用绑定变量。此外,查询可能会受益于提示,但如果统计数据是最新的,那么情况很少。
这里真的最好的答案是通过分析解释计划来学习如何调整SQL。 SQL Developer是免费的,可以轻松显示解释计划。在最基本的层面,尝试尽可能消除表访问(完整)。能够在帖子中编写查询,您可以在此级别进行调整。