SQL调优问题(SQL tuning issue)
我有一个问题:
select count(1) CNT from file_load_params a where a.doc_type = (select b.doc_type from file_load_header b where b.indicator = 'XELFASI') order by a.line_no
哪个解释计划是:
----------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 7 | 3 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 7 | | | |* 2 | TABLE ACCESS FULL | FILE_LOAD_PARAMS | 15 | 105 | 2 (0)| 00:00:01 | | 3 | TABLE ACCESS BY INDEX ROWID| FILE_LOAD_HEADER | 1 | 12 | 1 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | FILE_LOAD_HEADER_UK | 1 | | 0 (0)| 00:00:01 | -----------------------------------------------------------------------------------------------------
我以为我可以优化这个查询并写下这个:
select count(1) CNT from file_load_params a,file_load_header b where b.indicator = 'XELFASI' and a.doc_type = b.doc_type order by a.line_no
其解释计划是:
----------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 19 | 3 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 19 | | | | 2 | NESTED LOOPS | | 15 | 285 | 3 (0)| 00:00:01 | | 3 | TABLE ACCESS BY INDEX ROWID| FILE_LOAD_HEADER | 1 | 12 | 1 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | FILE_LOAD_HEADER_UK | 1 | | 0 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL | FILE_LOAD_PARAMS | 15 | 105 | 2 (0)| 00:00:01 | -----------------------------------------------------------------------------------------------------
好吗? 我想不是,但我期待更好的结果......你有什么想法吗?
I have a query:
select count(1) CNT from file_load_params a where a.doc_type = (select b.doc_type from file_load_header b where b.indicator = 'XELFASI') order by a.line_no
Which explain plan is:
----------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 7 | 3 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 7 | | | |* 2 | TABLE ACCESS FULL | FILE_LOAD_PARAMS | 15 | 105 | 2 (0)| 00:00:01 | | 3 | TABLE ACCESS BY INDEX ROWID| FILE_LOAD_HEADER | 1 | 12 | 1 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | FILE_LOAD_HEADER_UK | 1 | | 0 (0)| 00:00:01 | -----------------------------------------------------------------------------------------------------
I thought that I could optimize this query and write this one:
select count(1) CNT from file_load_params a,file_load_header b where b.indicator = 'XELFASI' and a.doc_type = b.doc_type order by a.line_no
Its explain plan is:
----------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 19 | 3 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 19 | | | | 2 | NESTED LOOPS | | 15 | 285 | 3 (0)| 00:00:01 | | 3 | TABLE ACCESS BY INDEX ROWID| FILE_LOAD_HEADER | 1 | 12 | 1 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | FILE_LOAD_HEADER_UK | 1 | | 0 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL | FILE_LOAD_PARAMS | 15 | 105 | 2 (0)| 00:00:01 | -----------------------------------------------------------------------------------------------------
Is it good? I think not,but I expected better result...Do you have any idea?
原文:https://stackoverflow.com/questions/4322096
更新时间:2022-01-08 13:01
最满意答案
从实际答案中提出我的答案:
我假设
$file
是一个使用类似fopen()
的文件指针。 如果是这样,你是否将指针重新设置回文件的开头? 如果不是,则在第二个calc_average()
调用的开始时,$line = fgetcsv($file)
将始终返回false。Placing my answer from the comments in an actual answer:
I am assuming
$file
is a file pointer obtained using something likefopen()
. If so, are you resetting the pointer back to the beginning of the file? If not,$line = fgetcsv($file)
will always return false at the start of the secondcalc_average()
call.
相关问答
更多-
如何将函数传递给具有不同参数的函数并执行它c#(how to pass a function to a function with different parameters and execute it c#)[2023-11-04]
也许这些代码可以帮助你。 public T Common(Func action) { //do something log or watch try { return action(); } catch (Exception ex) { throw new Exception(ex.Message); } ... -
Php函数返回没有值(Php function returns with no value)[2021-02-22]
看起来像 AND $table_itemmeta.meta_value LIKE 'order_date' 应该 AND $table_itemmeta.meta_key LIKE 'order_date' It looks like AND $table_itemmeta.meta_value LIKE 'order_date' should be AND $table_itemmeta.meta_key LIKE 'order_date' -
如果要使用对象调用方法,则应指定对象和方法,如下所示: call_user_func_array( array( $contact, 'lists' ), $attributes); PHP文档中有更多示例 If you want to call a method using an object, you should specify both the object and the method like so: call_user_func_array( array( $contact, 'lists' ...
-
if ($v) {是你的问题。 0的计算结果为false,因此它被跳过。 我建议删除, if ,它是不需要的。 if ($v) { is your problem. 0 evaluates to false, so it's being skipped. I suggest removing that if, it's unneeded.
-
通过我意识到的测试,我发现问题是“合作”类型的两个域类对象之间的比较。 当我测试条件 if(bur_coo == coo) 它总是返回false,即使两者都是相同的值(具有相同的id)。 我google了如何比较两个域类我发现运算符“等于”,我修改了代码 if (bur coo.equals (coo)) { println("true") } else { println("false") } 结果总是错误的。 解决方案我找到的解决方案是比较他们的id if(bur_coo.id ...
-
从实际答案中提出我的答案: 我假设$file是一个使用类似fopen()的文件指针。 如果是这样,你是否将指针重新设置回文件的开头? 如果不是,则在第二个calc_average()调用的开始时, $line = fgetcsv($file)将始终返回false。 Placing my answer from the comments in an actual answer: I am assuming $file is a file pointer obtained using something lik ...
-
您将需要使用call_user_func_array和str_getcsv call_user_func_array(array($obj, "B"), str_getcsv($params)); You will need to use call_user_func_array and str_getcsv call_user_func_array(array($obj, "B"), str_getcsv($params));
-
如何创建一个返回带有不同参数的函数的函数?(How to create a function that returns a function with different arguments?)[2023-04-15]
所以,你的问题是你想编写两个函数,但是这些函数可以有两个以上的参数。 这可能是有用的: "%*f%" <- function(a,b, ...) { force(a) force(b) if (length(formals(args(a))) > 1L && length(formals(args(b))) > 1L) stop("Only one function with additional parameters allowed.") if (length(for ... -
在some_function_2()您应该使用返回两个值的查询,而不是记录: CREATE OR REPLACE FUNCTION some_function_2(OUT out_code2 integer, OUT out_message2 text) RETURNS RECORD AS $BODY$ DECLARE BEGIN --Calling first function, return two out parameters and end function SELECT out ...
-
PHP函数返回错误的值(PHP function returns wrong values)[2023-08-03]
相关文章
更多- SQL Server 压力测试
- sql问题
- 锋利的SQL
- SQL的一个简单问题
- 一个sql查询
- 关于mysql 的 sql
- 请教一个SQL实现
- SQL优化问题
- sql 语句
- MyBatis 动态 SQL详解
最新问答
更多- h2元素推动其他h2和div。(h2 element pushing other h2 and div down. two divs, two headers, and they're wrapped within a parent div)
- 创建一个功能(Create a function)
- 我投了份简历,是电脑编程方面的学徒,面试时说要培训三个月,前面
- PDO语句不显示获取的结果(PDOstatement not displaying fetched results)
- Qt冻结循环的原因?(Qt freezing cause of the loop?)
- TableView重复youtube-api结果(TableView Repeating youtube-api result)
- 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
- SQL Server 2014版本支持的最大数据库数(Maximum number of databases supported by SQL Server 2014 editions)
- 我如何获得DynamicJasper 3.1.2(或更高版本)的Maven仓库?(How do I get the maven repository for DynamicJasper 3.1.2 (or higher)?)
- 以编程方式创建UITableView(Creating a UITableView Programmatically)
- 如何打破按钮上的生命周期循环(How to break do-while loop on button)
- C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
- 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
- 如何防止调用冗余函数的postgres视图(how to prevent postgres views calling redundant functions)
- Sql Server在欧洲获取当前日期时间(Sql Server get current date time in Europe)
- 设置kotlin扩展名(Setting a kotlin extension)
- 如何并排放置两个元件?(How to position two elements side by side?)
- 如何在vim中启用python3?(How to enable python3 in vim?)
- 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
- 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
- Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
- dedecms如何安装?
- 在哪儿学计算机最好?
- 学php哪个的书 最好,本人菜鸟
- 触摸时不要突出显示表格视图行(Do not highlight table view row when touched)
- 如何覆盖错误堆栈getter(How to override Error stack getter)
- 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
- USSD INTERFACE - > java web应用程序通信(USSD INTERFACE -> java web app communication)
- 电脑高中毕业学习去哪里培训
- 正则表达式验证SMTP响应(Regex to validate SMTP Responses)