如何针对 Oracle 优化此查询

     2023-05-09     302

关键词:

【中文标题】如何针对 Oracle 优化此查询【英文标题】:How to optimize this query for Oracle 【发布时间】:2018-10-13 14:41:59 【问题描述】:

我正在学习使用索引、索引簇、哈希簇等结构进行查询优化。我有一张桌子客户和预订。我需要优化 2 个查询

查询 1:

 SELECT BOOKING.BID, CUSTOMER.CID, BOOKING.SEAT_PRICE
    FROM BOOKING, CUSTOMER
    WHERE BOOKING.CID= CUSTOMER.CID
    AND BOOKING.SEAT_PRICE>200;

查询 2:

SELECT BOOKING.BID, CUSTOMER.CID
FROM BOOKING, CUSTOMER
WHERE BOOKING.CID= CUSTOMER.CID
AND CUSTOMER.CID>1900;

理论上,为了提高性能,我们需要对 WHERE、JOIN、ORDER BY... 子句中的所有谓词进行索引/索引簇/散列簇。但是,当我尝试对上述查询遵循该规则时,它没有任何性能改进。

例如,对于第一个查询,我在 BOOKING 和 CUSTOMER 表的 CID 列上创建索引。我还在 BOOKING 表的 SEAT_PRICE 列上创建索引。我运行的脚本如下:

CREATE INDEX BOOKING_SEAT_PRICE ON BOOKING(SEAT_PRICE);
CREATE INDEX BOOKING_CID ON BOOKING(CID);
CREATE INDEX CUSTOMER_CID ON CUSTOMER(CID);

请注意,我创建了跟踪文件以查看查询统计信息。在创建这些索引之前,我运行查询以创建跟踪文件。创建这些索引后,我再次运行它以创建另一个跟踪文件。但是,新的跟踪文件在时间、CPU、运行时间、查询等方面没有任何改进。它的性能甚至最差。

谁能帮我解决这个问题?这真的让我很沮丧,因为我不明白为什么,我严格遵守规则。我用谷歌搜索但无济于事。

【问题讨论】:

必须检查执行计划才能确定,但​​对于第一个,可能只使用座位价格和 customer.cid 的索引。第二个可能会同时使用两个 cid。 【参考方案1】:

你可以使用复合索引:

SELECT BOOKING.BID, CUSTOMER.CID, BOOKING.SEAT_PRICE
FROM BOOKING 
JOIN CUSTOMER  -- explicit JOIN
  ON BOOKING.CID = CUSTOMER.CID
WHERE BOOKING.SEAT_PRICE>200;

CREATE INDEX BOOKING_SEAT_PRICE_CID ON BOOKING(SEAT_PRICE, CID);
CREATE INDEX CUSTOMER_CID ON CUSTOMER(CID);

【讨论】:

感谢@Lukasz Szozda,复合索引的工作方式与以前相同。可能我需要学习阅读跟踪文件并解释计划。你介意帮我解决关于跟踪文件的新问题吗?***.com/questions/52817309/…

查询优化 [Oracle]

】查询优化[Oracle]【英文标题】:Queryoptimization[Oracle]【发布时间】:2018-12-0514:56:31【问题描述】:如何优化此查询的性能?SELECTCount(DISTINCTDT.id)FROMpcwdeptransDTINNERJOINpcwitemtotalITONDT.id=IT.deposittransidLEFTOUTERJOINpcwdepreceiptDRONDR.depositt 查看详情

如何优化此查询

】如何优化此查询【英文标题】:HowdoIoptimizethisquery【发布时间】:2013-04-2623:41:29【问题描述】:Createtable#tmptble(RuleId,SubjectId,RID,Date)Insertinto#tmptble(RuleId,SubjectId,RID,Date)SelectRuleTable.RuleId,RuleTable.SubjectId,KeyTable.RID,Key 查看详情

如何优化此查询...?

】如何优化此查询...?【英文标题】:HowcanIoptimizethisquery...?【发布时间】:2009-06-2615:32:12【问题描述】:我有两张桌子,一张用于路线,一张用于机场。Routes包含刚刚超过9000行,并且我已对每一列进行了索引。机场只有2000行,... 查看详情

SQL Server - 如何优化此查询?

】SQLServer-如何优化此查询?【英文标题】:SQLServer-howcanthisquerybeoptimized?【发布时间】:2013-07-2218:36:01【问题描述】:此查询平均需要4秒。它将成为存储过程中的子查询,我需要它花费一秒。这是查询:(selectcustomercampaignname+\'$\'... 查看详情

如何使用 5 个子查询优化此查询?

】如何使用5个子查询优化此查询?【英文标题】:HowcanIoptimizethisquerywith5subqueries?【发布时间】:2014-11-2019:09:40【问题描述】:SELECT(SELECTCOALESCE(SUM(t.hours),0)ASallotted_hoursFROMtasksAStWHEREt.projects_id=8ANDt.complete!=100ANDt.nameLIKE\'%Ongoin 查看详情

如何优化此查询

】如何优化此查询【英文标题】:HowtoOptimizethisQuery【发布时间】:2011-02-1918:37:38【问题描述】:我正在学习MSSQLServer2008R2,所以请原谅我的无知。这个查询需要3秒,我想在1秒内完成。该查询仅用于测试目的,实际上我会加入不... 查看详情

如何优化此 SQL Server 查询 - 多个子查询

】如何优化此SQLServer查询-多个子查询【英文标题】:HowtooptimizethisSQLServerquery-Multiplesubqueries【发布时间】:2020-07-2422:41:07【问题描述】:我在SQLServer中有这个带有4个子查询的查询,我正在寻找优化它的方法:DECLARE@INICIODATEDECLARE@... 查看详情

如何在 Postgres 中优化此查询

】如何在Postgres中优化此查询【英文标题】:HowcanIoptimizethisqueryinPostgres【发布时间】:2021-02-1214:19:23【问题描述】:以下查询需要更多时间来运行。如何优化以下查询以运行更多记录?我已经为这个查询运行了ExplainAnalyze。附上... 查看详情

针对特定查找优化的索引

】针对特定查找优化的索引【英文标题】:Indexoptimisedforspecificlookup【发布时间】:2012-08-1708:21:44【问题描述】:我有一个表(可能会变大,大约数百万行),我会定期在其上执行查询SELECT*fromtableWHEREsomefield=20,并且我希望此查... 查看详情

如何针对 db2 数据库优化 SQL/Python 选择查询?

】如何针对db2数据库优化SQL/Python选择查询?【英文标题】:HowtooptimizeSQL/Pythonselectqueriesagainstadb2database?【发布时间】:2021-08-0614:11:13【问题描述】:通过Python连接到服务器上的db2数据库并查询一个巨大的表(可能有200万条记录,... 查看详情

如何使用其中的一些子查询优化此查询

】如何使用其中的一些子查询优化此查询【英文标题】:Howtooptimizethisquerywithsomesubqueriesinit【发布时间】:2013-03-1810:05:46【问题描述】:我的查询是这样的:SELECTdate_format(created_at,\'%Y-%m-%d\')ASthe_date,COUNT(s.id)AStotal,(SELECTCOUNT(ks.id)FRO... 查看详情

如何在 Firebird 2.1 中优化此查询?

】如何在Firebird2.1中优化此查询?【英文标题】:HowcanIoptimizethisqueryinFirebird2.1?【发布时间】:2012-03-0103:47:12【问题描述】:我正在使用Firebird2.1,我需要一些帮助来优化此查询:(可能通过将IN-s替换为JOINS或其他方式来加快速度... 查看详情

如何在 MYSQL 中优化此查询?需要做啥

】如何在MYSQL中优化此查询?需要做啥【英文标题】:HowcanIoptimisethisqueryinMYSQL?Whatneedstobedone如何在MYSQL中优化此查询?需要做什么【发布时间】:2010-08-1900:40:40【问题描述】:请向下滚动到“25/08/2010更新”。我有一个已变成视图... 查看详情

如何在 MySQL 中优化此查询

】如何在MySQL中优化此查询【英文标题】:HowtooptimizethisqueryinMySQL【发布时间】:2015-10-2718:08:21【问题描述】:我有这两张表(Moodle2.8):CREATETABLE`mdl_course`(`id`bigint(10)NOTNULLAUTO_INCREMENT,`category`bigint(10)NOTNULLDEFAULT\'0\',`sortorder`bigint(1 查看详情

如何优化此查询并替换 MAX 函数?

】如何优化此查询并替换MAX函数?【英文标题】:HowcanIoptimizethisqueryandreplacetheMAXfunction?【发布时间】:2014-07-0902:15:52【问题描述】:SELECTMAX(f_orderInteractionID)FROMtOrdersOINNERJOINtOrderInteractionsOIONOI.fk_orderID=O.f_orderIDGROUPBYOI.fk_ord 查看详情

MySQL - 如何优化此查询?

】MySQL-如何优化此查询?【英文标题】:MySQL-Howcanthisquerybeoptimised?【发布时间】:2010-06-2805:04:26【问题描述】:以下查询有效,但10条记录(2秒)的速度非常慢。分析说它创建了一个tmp表,但我不确定为什么。基本上,我将当前... 查看详情

如何优化此查询(或内部 AND 验证)?

】如何优化此查询(或内部AND验证)?【英文标题】:HowCanIoptimizethisquery(ORinsideANDvalidation)?【发布时间】:2011-11-2919:25:20【问题描述】:我遇到了这个查询的问题:SELECTcol1,col2,col3,...,colnFROMMyTableWHEREcol1=@value1AND(ISNULL(col2,\'c\')=ISNU... 查看详情

如何优化此 SQL 查询

】如何优化此SQL查询【英文标题】:HowcanIoptimisethisSQLquery【发布时间】:2011-12-1313:06:25【问题描述】:我正在编写一个软件,用于识别已放在网络服务器(CMS)上但不再需要且应该/可以删除的文件。首先,我尝试手动重现所有必需... 查看详情