问题标签 [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 - “TABLE ACCESS BY INDEX ROWID”是否意味着优化器使用索引或表?
是否TABLE ACCESS BY INDEX ROWID
意味着优化器正在访问rowid
索引或扫描表以获取rowids
?
目前查询正在几秒钟内完成。但是在计划中说它不使用任何索引,两个表都有适当的索引。
mysql - 将 NOT IN 查询转换为更好的性能
我使用的是 MySQL 5.0,我需要微调这个查询。谁能告诉我在这方面我能做些什么调整?
tsql - Sybase ASE - 性能选择与插入选择
我已经看到 select into 的性能优于 insert/select 组合,因为它没有记录。但是今天我遇到了不同的情况。我正在从物理表中选择进入临时表,它在 410 秒内插入 240 万条记录,但是当我将其拆分为选择进入语句以首先创建表,然后使用插入/选择插入数据时同样的查询在 10.6 秒内点击了 240 万条记录。
我很困惑,可能是什么原因?
410 秒内插入 240 万条记录
10.6 秒内插入 240 万条记录
珍发表评论后
现在它的表现很奇怪。如果我先执行查询1,然后执行查询2,那么结果如上。但是如果我切换顺序,查询 1 会在 ~9 秒内运行,而查询 2 会在 ~7 秒内运行。
查询 1
查询 2
sql - 如何找出 spid 的状态为何被挂起?spid 正在等待什么资源?
我运行EXEC sp_who2 78
并得到以下结果:
我怎样才能找到它的状态为什么被暂停?
这个过程是一个沉重INSERT
的基于昂贵的查询。一个SELECT
从多个表中获取数据并将大约 3-4 百万行写入不同表的大数据。
没有锁/块。
它waittype
链接到的是CXPACKET
。我可以理解,因为您可以在下图中看到 9 个 78。
让我担心并且我真正想知道的是,为什么SPID
78 的 1 号被停赛。
我知道当 a 的状态SPID
被挂起时,这意味着该进程正在等待资源,并且在获得资源时它将恢复。
我怎样才能找到有关此的更多详细信息?什么资源?为什么不可用?
我使用了很多下面的代码及其变体,但是我还能做些什么来找出SPID
暂停的原因吗?
我已经使用了 sp_whoisactive。我为这个特定的 spid78 得到的结果如下:(分成 3 张图片以适应屏幕)
sql - 迁移后sql性能分析
我将许多 Oracle DB 迁移到 ESX 环境中的新虚拟机(完全相同的系统、数据库版本等)。我担心的是磁盘 IO 性能,因为使用了不同的存储。我需要在迁移之前和之后执行 sql 负载检查以便稍后进行比较。没有时间进行更深入的性能分析,所以我决定做一个非常简单的测试:
我执行 40 000 000 行插入并测量迁移之前和之后的操作时间。
如果数据库没有其他活动,这种测试就足够了,但我不允许在测试期间停止其他连接。这就是为什么其他工作负载会影响我的测试插入结果。
我解决这个问题的想法是在每个测试期间执行一系列测试并收集统计数据,以便我知道执行每个测试时的环境是什么然后我将只比较那些在类似工作负载下运行的测试。
您能否建议我如何解决这个问题,您如何看待这个想法以及我应该收集哪些统计数据?
sql - DBA_HIST_SQLSTAT:执行次数为零时经过的非零时间
您好,我在 dba_hist_sqlstat 视图中发现了一些 sql_ids 统计信息的奇怪情况。当执行值为零时,这些似乎具有非零的经过时间值。我不明白这怎么可能。也许在会话不活动或有等待事件的情况下。你有没有遇到过类似的情况,这意味着什么?
sql - SQL sargable 和性能调优
我正在使用以下 where 谓词从我们的一张 DW 表中仅获取周一至周五的门票。
请问是否可以让我知道DATEPART
谓词是否可调用?
我查看了实际的执行计划,即使使用该DATEPART
函数,它也使用索引搜索。
我们已经通过修改 where 谓词、分析计划、设置统计信息等优化了许多旧查询。对于这一点,我不确定是否有更好的方法来仅从 mon - fri (shifts. .)?
sql - 如何在 Oracle 中提高 NOT EXISTS 性能
我的 SQL 语句看起来像这样。table1 和 table3 有超过 1000000 行,table2 有 100 行。这个 SQL 语句很慢。完成需要100多秒。有什么办法可以改善吗?
sql - 没有连接的 Oracle IN 子句对性能有何影响?
我有一个这种形式的查询,它平均需要大约 100 个子句元素,并且在某些罕见的情况下 > 1000 个元素。如果超过 1000 个元素,我们会将 in 子句分块到 1000(Oracle 最大值)。
SQL 的形式为
我从中选择的表很大,并且包含的行数将比我的 in 子句中的多几百万行。我担心优化器可能会选择进行表扫描(我们的数据库没有最新的统计信息 - 是的 - 我知道......)
有没有我可以传递的提示来强制使用主键 - 在不知道主键的索引名称的情况下,可能类似于 ... /*+ DO_NOT_TABLE_SCAN */?
是否有任何创造性的方法来拉回数据,这样
- 我们执行最少的往返次数
- 我们读取了最少数量的块(在逻辑 IO 级别?)
- 这会更快吗..
sql - SELECT (MIN) vs ORDER BY ASC WITH FOR UPDATE
我有表 test1(TXID 主键,STATE,NEXTRUN,TARGET)并且想要获得具有最小 NEXTRUN 状态的行(作为输入传递)。
使用 MIN() 查询 1:
解释计划显示(2 TABLE ACCESS FULL)
使用 ORDER BY 和 ROWNUM 查询 2:
解释计划:
就死锁预防和性能而言,哪个查询更好?从多个线程(连接)调用查询。有时我看到在第一种情况下发生死锁(2 TABLE ACCESS FULL)正在发生。因此,我正在尝试使用查询 2。