query-optimization 相关问题

标签指的是如何使查询运行得更快。其中一些问题可能属于DBA.stackexchange.com,特别是如果它们涉及重建索引,查询计划等。请使用其他标记来指定您的查询语言。默认情况下,假定为SQL。

有没有一种方法可以编写不带 AND 运算符的连接 where 子句?

只是出于好奇,是否有一种简短/漂亮的方法来编写经典的 sql where 子句,而无需使用 AND 运算符来连接表? 经典的: select * from table1, table2, table3 where table1.fkId=table...

回答 1 投票 0

增强一列 280M 行的排序

我有一个应用程序,它在应用分页后在网格内显示 SQL Server 表的记录。用户可以过滤或将订单应用到任何列。 当桌子变得太大时就会出现问题......

回答 1 投票 0

CloudSQL 与 PostgreSQL 性能非常慢

我想从 BigQuery 迁移到 CloudSQL 以节省成本。 我的问题是,与 BigQuery 相比,带有 PostgreSQL 的 CloudSQL 非常慢。 在 BigQuery 中需要 1.5 秒的查询几乎需要...

回答 6 投票 0

WHERE 子句中不同的比较列导致意外的速度变慢

(以下所有标识符均已匿名。) 我在 Postgres 中有以下查询: 选择id,dt 来自表1 t1 WHERE 状态不为空 和 ( (不存在(从 table2 t2 中选择 1,其中 t2。

回答 1 投票 0

Oracle 在尝试从 2 个现有视图创建表或物化视图时非常慢

我有一个名为 STAFFACTIVE 的经典 Oracle 视图,其中包含大约 9500 行,每行 10 个小型本机数据类型字段(仅限数字和 varchar2(100))。 该视图是通过来自

回答 1 投票 0

如何提示内部选择查询并行运行以进行批量更新

SELECT 查询与大量工作人员一起运行“并行 Seq”扫描。现在,当此查询用作 UPDATE 中的子查询时,它会回归到“Seq”扫描,即非并行。 ...

回答 1 投票 0

postgres 并行顺序扫描

尽管 cpv.value 列上存在索引,但仍选择并行顺序扫描。值列的数据类型为“text”。这是查询计划中成本最高的步骤。我如何调整它以...

回答 2 投票 0

如果我有一个包含三列的索引,但我有两个查询,一个仅针对两列,一个针对三列 - 两者都会使用相同的索引吗?

我有一个对象,其中 IsDeleted 和 RealmIntID 作为列,这些列将始终出现在该对象的每个查询中(以及一些分页参数)。我们不想退回软删除的o...

回答 1 投票 0

使用 Dapper ORM 优化 SQL Server 中大型表的查询性能

简介: 在我们的应用程序中,我们利用 Dapper ORM 与 SQL Server 数据库进行交互。我们的关键表之一,OperationSteps,随着时间的推移显着增长,导致

回答 1 投票 0

对 WHERE 和 ORDER BY 列使用 PostgreSQL 索引

对于以下查询,在我们有的情况下 < 25 records for the contracts 1, 2, 3, this query performs extremely slow: SELECT * FROM transactions AS t WHERE t.contract_id in (1, ...

回答 1 投票 0

我想提高我的 Snowflake SQL 查询性能

我有一个雪花查询,我正在尝试提高性能。 热膨胀系数为 ( 选择不同的 交流电 来自“DB1”。“SCHEMA1”。“TABLE1” 在哪里 AG = 'PPPP...

回答 1 投票 0

执行查询以获得符合某些条件的所有记录的总数,然后对其进行分页?

我需要查询分页数据。要求之一是不仅要显示给定页面上的项目,还要显示用户可以查看的项目总数(也支持页面导航...

回答 1 投票 0

XML 表上 PLSQL 查询的性能调整

我需要对 Oracle 数据库上的表执行一些查询。该表包含 XML 值。下面是我的 xml 结构的示例: 382010 我需要对 Oracle 数据库上的表执行一些查询。该表包含 XML 值。下面是我的 xml 结构示例: <Parent> <ParentId>382010</ParentId> <LastUpd>2023-03-01T22:59:10.456241</LastUpd> <UserId>0</UserId> <attrn>xxx</attrn> <Child> <ChildId>1</ChildId> <Attribute1 ID="1873" D="1466 Description">1466</Attribute1> <Attribute2 ID="1234" D="QWERTY Description" E="503" ED="Error 503 Description">QWERTY</Attribute2> <Attribute3 ID="4921" D="Other Description">YourValue</Attribute3> </Child> <Child> <ChildId>2</ChildId> <Attribute1 ID="1296" D="Some Description">1234</Attribute1> <Attribute2 ID="1234" D="Some Different Description">ABC</Attribute2> <Attribute3 ID="4921" D="Other Description" E="501" ED="Error 501 Description">MyValye</Attribute3> </Child> </Parent> 我需要选择所有有错误的孩子属性,可以通过“E”属性来识别(例如孩子1中的属性2和孩子2中的属性3)。 我对这种 XML 查询不是很专家,经过一番尝试后,我最终构建了下面的查询: SELECT EXTRACTVALUE (VALUE (X), '/Parent/UserId') AS USER_ID ,EXTRACTVALUE (VALUE (X), '/Parent/ParentId') AS PARENT_ID ,EXTRACTVALUE (VALUE (X), '/Parent/attrn') AS PARENT_ATTR_N_COL_NAME ,EXTRACTVALUE (VALUE (I), '/Child/ChildId') AS ROW_NUM ,CASE WHEN EXISTSNODE (VALUE (E), '/Attribute1/@E') = 1 THEN ATTR_ONE_COL_NAME WHEN EXISTSNODE (VALUE (E), '/Attribute2/@E') = 1 THEN ATTR_TWO_COL_NAME WHEN EXISTSNODE (VALUE (E), '/Attribute3/@E') = 1 THEN ATTR_THREE_COL_NAME END AS FIELD ,EXTRACTVALUE (VALUE(E), '/*/text()') as VALUE ,EXTRACTVALUE (VALUE(E), '/*/@E') as ERROR_CODE ,EXTRACTVALUE (VALUE(E), '/*/@ED') as ERROR_DESC FROM XML_TABLE X ,TABLE (XMLSEQUENCE (EXTRACT (VALUE (X), '/Parent/Child'))) I ,TABLE (XMLSEQUENCE (EXTRACT (VALUE (I), '/Child/*'))) E WHERE EXTRACTVALUE (VALUE (X), '/Parent/ParentId') = 382010 AND EXISTSNODE (VALUE (E), '/*/@E') = 1'; 当然,XML(然后是查询)实际上要大得多,我只是发布了一个简化的示例以使其更加综合。有时父节点包含数百个子节点,有时我需要查询数千个父节点,所以我想知道是否有一种方法可以优化上述查询并使其更快。 非常感谢:) 考虑用更新且更强大的 EXTRACTVALUE 替换已弃用的 XMLTABLE 函数。使用 XMLTABLE,所有解析都可以在一次查询中完成。然后,您可以使用该查询来执行 DML 操作,也可以循环遍历它以进行更多的过程控制。 下面的代码与您的结果并不完全匹配,但它足够接近,可以让您了解它是如何工作的。 select parent.user_id, parent.parent_id, parent.parent_attr_n_col_name, child.row_num, attribute.value, attribute.error_code, attribute.error_desc from xmltest x, xmltable ('/Parent' passing x.a columns user_id number path 'UserId', parent_id number path 'ParentId', parent_attr_n_col_name path 'attrn' ) parent, xmltable ('/Parent/Child' passing x.a columns row_num number path 'ChildId' ) child, xmltable ('/Parent/Child/*' passing x.a columns value varchar2(100) path 'text()', error_code varchar2(100) path '@E', error_desc varchar2(100) path '@ED' ) attribute where parent_id = 382010 and error_code is not null; 这是我用于测试代码的架构: --drop table xmltest; create table xmltest(a xmltype); insert into xmltest values(xmltype(' <Parent> <ParentId>382010</ParentId> <LastUpd>2023-03-01T22:59:10.456241</LastUpd> <UserId>0</UserId> <attrn>xxx</attrn> <Child> <ChildId>1</ChildId> <Attribute1 ID="1873" D="1466 Description">1466</Attribute1> <Attribute2 ID="1234" D="QWERTY Description" E="503" ED="Error 503 Description">QWERTY</Attribute2> <Attribute3 ID="4921" D="Other Description">YourValue</Attribute3> </Child> <Child> <ChildId>2</ChildId> <Attribute1 ID="1296" D="Some Description">1234</Attribute1> <Attribute2 ID="1234" D="Some Different Description">ABC</Attribute2> <Attribute3 ID="4921" D="Other Description" E="501" ED="Error 501 Description">MyValye</Attribute3> </Child> </Parent>')); 这是您的查询,根据之前的架构进行了一些对我有用的更改。我不确定你的表是如何设置的 - 使用 REF 而不是值? SELECT EXTRACTVALUE (X.a, '/Parent/UserId') AS USER_ID ,EXTRACTVALUE (X.a, '/Parent/ParentId') AS PARENT_ID ,EXTRACTVALUE (X.a, '/Parent/attrn') AS PARENT_ATTR_N_COL_NAME ,EXTRACTVALUE (I.column_value, '/Child/ChildId') AS ROW_NUM -- ,CASE -- WHEN EXISTSNODE (E.column_value, '/Attribute1/@E') = 1 THEN ATTR_ONE_COL_NAME -- WHEN EXISTSNODE (E.column_value, '/Attribute2/@E') = 1 THEN ATTR_TWO_COL_NAME -- WHEN EXISTSNODE (E.column_value, '/Attribute3/@E') = 1 THEN ATTR_THREE_COL_NAME -- END AS FIELD ,EXTRACTVALUE (E.column_value, '/*/text()') as VALUE ,EXTRACTVALUE (E.column_value, '/*/@E') as ERROR_CODE ,EXTRACTVALUE (E.column_value, '/*/@ED') as ERROR_DESC FROM xmltest X ,TABLE (XMLSEQUENCE (EXTRACT (X.a, '/Parent/Child'))) I ,TABLE (XMLSEQUENCE (EXTRACT (value(I), '/Child/*'))) E WHERE EXTRACTVALUE (X.a, '/Parent/ParentId') = 382010 AND EXISTSNODE (VALUE (E), '/*/@E') = '1';

回答 1 投票 0

两个数据库之间的 SQL View 速度极慢

在同一服务器上的另一个 SQL Server 数据库中查询表的视图上运行简单的 SQL 查询时,我遇到了主要的性能问题。 我有两个数据库,db1(包含table1,...

回答 1 投票 0

在postgres中,如何知道每个模式哪个查询速度慢

我使用 postgres 模式进行多租户设置: 民众 公司_a 公司_b 我需要查看哪些查询 x 公司很慢,可以直接使用 postgres 执行此操作吗? P.D:另外,看看哪个 v...

回答 1 投票 0

在 Oracle 中索引不适用于使用范围操作的列

我已经为我的表的时间戳列创建了索引,但是当我在oracle中查询和检查解释计划时,它正在执行全表扫描而不是范围扫描 下面是DDL脚本...

回答 3 投票 0

为什么这个 Postgresql UPDATE 语句即使不更新任何行也这么慢?

我看到计划进行全表扫描,但它从未执行,并且 UPDATE 无论如何都需要很长时间。为什么?? 这是解释输出 public.hone_cohortuser 更新(成本=3180.32..8951.5...

回答 1 投票 0

Mysql如何通过子查询和求和来优化查询?

祝你有美好的一天。我有以下查询,需要很长时间才能执行: 选择 formapago.codigos, formapago.cuentacte AS 货物, 如果为空( (选择 SUM(IF(参考.tip...

回答 1 投票 0

更新 FROM 子句中使用的同一个表上的记录

我正在尝试更新 FROM 子句中使用的表上的记录。当我执行它时,它需要更多的时间来执行(将近5小时)。 以下是所附的详细信息。 更新声明 更新

回答 1 投票 0

加快海量数据的SQL查询速度

我有这个SQL查询 选择 * 来自`storages_remains` 其中“免费”> 0 AND (...) 中的“CATALOG_ID” CATALOG_ID 不是唯一的,因为表可能包含多存储数据。 CATALOG_ID + STOR...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.