有哪些好的资源可用于理解主要引擎上的数据库调优并提升您在该领域的知识?
这个问题的想法是收集总是存在的大量资源,以便人们可以拥有良好的,同行认可的资源的"一站式"知识商店.
一般SQL
MySQL的
神谕
MS SQL Server
Sybase SQL Anywhere
JDBC
SELECT *
FROM { SELECT * FROM BigMillionTable UNION ALL SELECT * FROM SmallTensTable }
WHERE (some_condition)
Run Code Online (Sandbox Code Playgroud)
VS
SELECT *
FROM BigMillionTable
WHERE (some_condition)
UNION ALL
SELECT *
FROM SmallTensTable
WHERE (some_condition)
Run Code Online (Sandbox Code Playgroud)
我的问题:
BigMillionTable主内存中才能执行UNION ALL?下面是我的插入查询。
INSERT INTO /*+ APPEND*/ TEMP_CUSTPARAM(CUSTNO, RATING)
SELECT DISTINCT Q.CUSTNO, NVL(((NVL(P.RATING,0) * '10.0')/100),0) AS RATING
FROM TB_ACCOUNTS Q LEFT JOIN TB_CUSTPARAM P
ON P.TEXT_PARAM IN (SELECT DISTINCT PRDCD FROM TB_ACCOUNTS)
AND P.TABLENAME='TB_ACCOUNTS' AND P.COLUMNNAME='PRDCD';
Run Code Online (Sandbox Code Playgroud)
在以前版本的查询中,P.TEXT_PARAM=Q.PRDCD但在插入期间TEMP_CUSTPARAM由于违反了唯一约束CUSTNO。
插入查询需要很长时间才能完成。想知道如何使用distinct withLEFT JOIN语句。
谢谢。
我正在尝试从分区表中的多个分区中选择数据。它适用于单个分区(select * from table partition(ParititonName),但无法选择多个分区( )select * from table partitions(Part1,part2)。您能否让我知道如何在单个查询中选择多个分区。
我正在尝试从具有1.94亿条记录的表中计算记录数。使用了并行提示和索引快速扫描,但仍然很慢。请为所附查询提出其他替代或改进建议。
SELECT
/*+ parallel(cs_salestransaction 8)
index_ffs(cs_salestransaction CS_SALESTRANSACTION_COMPDATE)
index_ffs(cs_salestransaction CS_SALESTRANSACTION_AK1) */
COUNT(1)
FROM cs_salestransaction
WHERE processingunitseq=38280596832649217
AND (compensationdate BETWEEN DATE '28-06-17' AND DATE '26-01-18'
OR eventtypeseq IN (16607023626823731, 16607023626823732, 16607023626823733, 16607023626823734));
Run Code Online (Sandbox Code Playgroud)
这是执行计划:
[
]
查询给出了结果,但花了2个小时才计算出1.94亿。
修改过的代码可根据Littlefoot的建议添加DATE。使用实际列名编辑的代码。我是堆栈溢出的新手,因此已将计划作为映像进行了附加。
我遇到了性能问题,也许您可以帮忙。当我打开游标时,然后运行其他几个SELECT语句以使用游标中的变量来检索值(请参见下文)。这似乎减慢了整个过程。我认为这是因为PL / SQL和SQL引擎之间的切换。使用表集合会有所帮助吗?但是,正如我所看到的,由于我需要来自不同表的不同列,因此我需要具有多个不同的集合,如何在一条记录中输出所有内容以返回结果集?
CREATE OR REPLACE procedure sp_test (in_input in number)
as
v_calc number;
v_calc_res number;
v1 number;
v2 number;
v3 number;
CURSOR C_test IS
select col1 from test where col1 = in_input;
begin
open c_test
loop
fetch c_test into v_calc;
select col1 into v1 from t1;
select col1 into v2 from t2;
select col1 into v3 from t3;
v_calc_res := v_calc * 5 * v1 * v2 * v3;
dbms_output.put_line(v_calc_res);
end loop;
end sp_test;
/
Run Code Online (Sandbox Code Playgroud) oracle ×7
sql ×4
oracle11g ×2
performance ×2
database ×1
mysql ×1
plsql ×1
postgresql ×1
r ×1
r-faq ×1
sql-server ×1