问题标签 [sql-tuning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - 为什么PostgresQL查询性能随时间下降,但在重建索引时恢复
根据手册中的这一页,indexes don't need to be maintained
. 但是,我们正在使用具有连续速率的 PostgresQL 表运行updates
,deletes
并且inserts
随着时间的推移(几天),查询性能会显着下降。如果我们删除并重新创建索引,查询性能就会恢复。
我们正在使用开箱即用的设置。
我们测试中的表目前一开始是空的,并且增长到 50 万行。它有一个相当大的行(很多文本字段)。
我们是searching based of an index, not the primary key
(我已经确认正在使用该索引,至少在正常情况下是这样)
该表被用作单个进程的持久存储。在带有 Java 客户端的 Windows 上使用 PostgreSQL。
我愿意放弃insert and update performance
以保持查询性能。
我们正在考虑重新架构应用程序,以便数据以允许我们定期删除和重建索引而不影响应用程序的方式分布在各种动态表中。但是,与往常一样,要使其正常工作需要时间,我怀疑我们在配置或使用中缺少一些基本的东西。
我们已经考虑了forcing vacuuming
and rebuild to run at certain times
,但我怀疑locking period for such an action would cause our query to block
. 这可能是一个选项,但有一些实时(3-5 秒的窗口)影响需要我们的代码进行其他更改。
附加信息: 表格和索引
分析:
而且,是的,我知道有各种各样的事情we could do to normalize and improve the design of this table
。其中一些选项可能对我们可用。
我在这个问题上的重点是理解how PostgresQL is managing the index and query over time (understand why, not just fix)
。如果要重新完成或进行重大重构,将会有很多变化。
oracle - 为什么 Oracle 对此查询使用跳过扫描?
这是运行极其缓慢的查询的 tkprof 输出(警告:它很长 :-)):
根据我对 Oracle 的跳过扫描文档的阅读,当索引的第一列具有少量唯一值时,跳过扫描最有用。问题是该列的第一个索引具有大量唯一性。那么我是否正确假设跳过扫描在这里是错误的?另外,它应该做什么样的扫描?我应该为这个查询做更多的提示吗?
编辑:我还应该指出,查询的 where 子句使用该索引中的列IDX_MBR_IDENTFN
,而不使用除该索引中的其他列。据我所知,我没有跳过任何专栏。
编辑 2:我做了一些事情来加快这个查询。首先,我删除了分页。事实证明,这个查询无论如何只返回一行。其次,我添加了一个LEADING
提示以确保以正确的顺序查询表。第三,我删除了重复的mbr_idn
谓词。最后,我做了IDX_MBR_IDENTFN
独一无二的。总而言之,这极大地提高了性能(尽管它仍然是我正在运行的最昂贵的查询):
sql - 在 oracle SELECT 的 WHERE 子句中将列与自身进行比较
我有一个多表 SELECT 查询,它将列值与自身进行比较,如下所示:
这对我来说似乎是多余的。我的问题是,删除它们会对逻辑/性能产生任何影响吗?
提前致谢。
sql-server - 如何调整查询
我有一个运行缓慢的查询。我通常知道要提高性能,限制连接,并尝试使用 procs 而不是直接查询。由于业务规则,我不能使用 procs。我已经尽可能地减少了连接的数量。
查询调优的下一步是什么?
mysql - MySQL last_query_cost 用于复杂查询
当试图找到一个复杂查询(其中有一个子查询)的成本时,我得到的值为 0。mysql 的手册说:
“Last_query_cost 值只能针对简单的“平面”查询准确计算,不能准确计算诸如带有子查询或 UNION 的复杂查询。对于后者,该值设置为 0。
我的问题是 - 我如何计算复杂查询的成本?
oracle - Sql 调优顾问(接受配置文件)
我为一些查询创建了 sql 调优任务并执行了它。生成报告后,建议我运行以下命令:
但!我当然想知道这个配置文件是做什么的?!在互联网上搜索这个问题后,我发现了以下查询:
这个查询的结果如下:
我不明白它有什么作用:(而且我想将此配置文件提示转换为更具可读性的(/ +提示/)sql提示?
mysql - 数值列上的基于函数的索引
我有一个包含一些数字列的表,我必须将它们保持为数字,因为大多数时候我会从中受益。但我还需要使用部分匹配对这些列进行通用搜索,所以在我的 where 语句中我会有类似
我的问题是:
我可以在 num_col1 上创建一个基于函数的索引,将列转换为 CHAR 吗?我试过了,但似乎不可能。
如果没有,你们对我如何加快查询结果有任何其他建议吗?
我读到一些可能的解决方案可能是创建原始表的视图并将列类型更改为 varchar 并索引该列,或者另一种解决方案可能是向我的表中添加一个额外的 varchar 列并为其编制索引。我想避免这两种解决方案,因为我有一个非常大的表,其中已经包含大量行和大量列。
在此先感谢大家,Best,N。
sql - SQL SELECT 子句调优
SELECT
如果我在语句中使用实际的列名而不是 sql 查询,为什么执行得更快SELECT *
?
mysql - Equi Join的特例
我遇到了这个特殊的脚本,它使用了一种特殊的 equi join 形式。
为什么在 equi 连接中添加了零?我开始知道这与避免索引搜索有关,但仍然有人可以解释它的全貌。提前致谢
编辑 :
这与表/列声明无关。据我所知,这与 SQL 调优有关。
这就是我发现的:-
- 这用于较小的表。
- 这不是像通常那样进行索引搜索,而是一次搜索完整的表。
但是我真的不知道与正常的等值连接有什么区别,此外索引如何影响性能。
如果有人可以在特定的上下文中进行描述,并让我知道我的发现是否错误,那将非常有帮助。感谢您为此付出的时间和精力:-)
栏目说明:
两个表中的分配状态类型 ID 均声明为 NUMBER(9)
performance - 基于提示的 Oracle SQL 调优——对最近的版本有什么好处?
我读到 oracle 的 CBO(最新版本)非常好,即使给出了最差的连接顺序,CBO 也会自动采用最佳连接顺序。那么像 ORDERED 这样的提示对最近的版本(10,11)有什么好处吗?CBO 是否有可能错过最佳加入顺序?谢谢。