Java 删除选择查询中不必要的字段 select count(*) from ( SELECT HD.URINO /*HD.URIBRUI, HD.TCODE, HD.SQCODE*/ FROM TV_HD HD)
第2条解释:按ASC/DES部分删除订单(节省7%-10%) 第3条说明:删除聚合函数(平均值、总和、计数等) 第4条解释:使用标准VACCUUM回收死元组占用的存储空间Java 删除选择查询中不必要的字段 select count(*) from ( SELECT HD.URINO /*HD.URIBRUI, HD.TCODE, HD.SQCODE*/ FROM TV_HD HD),java,hibernate,postgresql,Java,Hibernate,Postgresql,第2条解释:按ASC/DES部分删除订单(节省7%-10%) 第3条说明:删除聚合函数(平均值、总和、计数等) 第4条解释:使用标准VACCUUM回收死元组占用的存储空间 VACUUM (VERBOSE, ANALYZE) your_table; 在正常的PostgreSQL操作中,被更新删除或废弃的元组不会从其表中物理删除;它们一直存在,直到真空完成。因此,有必要定期对频繁更新的表执行真空,,尤其是 真空有两种变体:标准真空和全真空 真空满可以回收更多磁盘空间,但运行速度要慢得多。此外,真空
VACUUM (VERBOSE, ANALYZE) your_table;
在正常的PostgreSQL操作中,被更新删除或废弃的元组不会从其表中物理删除;它们一直存在,直到真空完成。因此,有必要定期对频繁更新的表执行真空,,尤其是
真空有两种变体:标准真空
和全真空
真空满可以回收更多磁盘空间,但运行速度要慢得多。此外,真空的标准形式可以与生产数据库操作并行运行。(SELECT、INSERT、UPDATE和DELETE等命令将继续正常工作,但在抽真空时,您将无法使用ALTER table等命令修改表的定义。)抽真空满需要对正在处理的表进行独占锁定,因此,不能与表格的其他用途同时进行
因此,一般来说,管理员应努力使用标准真空
和避免真空满
详情如下:
谢谢您的时间。+删除查询中的所有杂乱内容,如果您所做的只是计数,则不需要所有这些列。修正格式。另外请注意,索引也用于联接,特别是因为您在这里只进行计数,而不是选择所有值。让我们从这里开始:EXPLAIN ANALYZE
。让我们知道分析结果是什么,然后我们可以讨论优化它。如果不清楚,很难说需要修复什么。@Makoto我添加了“解释-分析”信息并更新了查询。请检查并给我一些建议,如果您还告诉我们这些表格是如何关联的,我会帮上一点忙。从我现在看到的情况来看,那些顺序扫描正在扼杀你的表现;这意味着至少,urino
列会从索引中受益;为什么加入这些栏目是有意义的。它可以提高50%-60%的倍。但我希望它更舒适。你能详细说明一下第二步吗?
select count(*) from ( SELECT
HD.URINO
FROM
TV_HD HD
LEFT JOIN TV_SNAPSHOT T ON (HD.URINO = T.URINO AND HD.TCODE = T.TCODE AND T.DELFLG = 0 AND T.SYUBETSU = 1)
LEFT JOIN TV_SNAPSHOT T_SQ ON (HD.URINO = T_SQ.URINO AND HD.SQCODE = T_SQ.TCODE AND T_SQ.DELFLG = 0 AND T_SQ.SYUBETSU = 3)
LEFT JOIN (SELECT
N.URINO
FROM
TD_MAKKA N
WHERE
N.UPDATETIME IN (
SELECT
MIN (NMIN.UPDATETIME)
FROM
TD_MAKKA NMIN
WHERE
N.URINO = NMIN.URINO
AND
NMIN.TORIKESHIFLG <> -1
)
) NYUMIN
ON (HD.URINO = NYUMIN.URINO)
LEFT JOIN
(
SELECT
NSUM.URINO
,SUM (COALESCE(NSUM.NYUKIN ,0)) NYUKIN
,SUM (COALESCE(NSUM.NYUKIN ,0)) + SUM (COALESCE(NSUM.TESU ,0)) + SUM (COALESCE(NSUM.SOTA ,0)) SUMNYUKIN
FROM
TD_MAKKA NSUM
GROUP BY
URINO
) NYUSUM
ON (HD.URINO = NYUSUM.URINO)
LEFT JOIN
(
SELECT
N.URINO
FROM
TD_MAKKA N
WHERE
UPDATETIME = (
SELECT
MAX (UPDATETIME)
FROM
TD_MAKKA NMAX
WHERE
N.URINO = NMAX.URINO
AND
NMAX.TORIKESHIFLG <> -1
)
) NYUMAX
ON (HD.URINO = NYUMAX.URINO)
WHERE ( (HD.URIBRUI <> '1') OR ( HD.URIBRUI = '1' AND T_SQ.NYUKOBEFLG = '-1' ) )
ORDER BY
HD.URINO DESC
) COUNT_
select count(*) from ( SELECT
HD.URINO
FROM
TV_HD HD
LEFT JOIN TV_SNAPSHOT T ON (HD.URINO = T.URINO AND HD.TCODE = T.TCODE AND T.DELFLG = 0 AND T.SYUBETSU = 1)
LEFT JOIN TV_SNAPSHOT T_SQ ON (HD.URINO = T_SQ.URINO AND HD.SQCODE = T_SQ.TCODE AND T_SQ.DELFLG = 0 AND T_SQ.SYUBETSU = 3)
LEFT JOIN (SELECT
N.URINO
FROM
TD_MAKKA N
WHERE
N.UPDATETIME IN (
SELECT
MIN (NMIN.UPDATETIME)
FROM
TD_MAKKA NMIN
WHERE
N.URINO = NMIN.URINO
AND
NMIN.TORIKESHIFLG <> -1
)
) NYUMIN
ON (HD.URINO = NYUMIN.URINO)
LEFT JOIN
(
SELECT
N.URINO
FROM
TD_MAKKA N
WHERE
UPDATETIME = (
SELECT
MAX (UPDATETIME)
FROM
TD_MAKKA NMAX
WHERE
N.URINO = NMAX.URINO
AND
NMAX.TORIKESHIFLG <> -1
)
) NYUMAX
ON (HD.URINO = NYUMAX.URINO)
WHERE ( (HD.URIBRUI <> '1') OR ( HD.URIBRUI = '1' AND T_SQ.NYUKOBEFLG = '-1' ) )
) COUNT_
select count(*) from ( SELECT
HD.URINO
/*HD.URIBRUI,
HD.TCODE,
HD.SQCODE*/
FROM
TV_HD HD)
select count(*) from ( SELECT
HD.URINO
FROM
TV_HD HD
/*ORDER BY HD.URINO DESC*/)
select count(*) from ( SELECT
name
/*MAX(salary),
AVG(salary)*/
FROM Emp)
VACUUM (VERBOSE, ANALYZE) your_table;