我在DISTINCT上表现不佳.解释计划表明它正在进行SORT(GROUP BY),听起来不对.我希望某种HASH聚合能产生更好的结果.是否有提示告诉oracle使用HASH进行DISTINCT而不是排序?我在类似情况下使用了/*+ USE_HASH_AGGREGATION*/,但它不适用于DISTINCT.
所以这是我原来的查询:
SELECT
count(distinct userid) n, col
FROM users
GROUP BY col;
Run Code Online (Sandbox Code Playgroud)
用户有30M行,每个用户ID有12次.此查询需要70秒.
现在我们将其重写为
SELECT
count(userid) n, col
FROM
(SELECT distinct userid, col FROM users)
GROUP BY col
Run Code Online (Sandbox Code Playgroud)
这需要40秒.现在添加提示来做hash而不是sort:
SELECT
count(userid) n, col
FROM
(SELECT /*+ USE_HASH_AGGREGATION */ distinct userid, col FROM users)
GROUP BY col
Run Code Online (Sandbox Code Playgroud)
这需要10秒钟.
如果有人能够向我解释为什么会发生这种情况,或者我如何能够将第一个简单的查询打造成与第3个一样好的工作,那将是非常棒的.
我关心查询简单性的原因是因为实际生成了这些查询.
计划:1)慢:
----------------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | OMem | 1Mem | Used-Mem | Used-Tmp|
-------------------------------------------------------------------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我试图调用一个存储过程,该存储过程具有默认(可选)参数而不传递它们并且它不起作用.基本上与此处描述的问题相同.
我的代码:
SqlParameterSource in = new MapSqlParameterSource()
.addValue("ownname", "USER")
.addValue("tabname", cachedTableName)
.addValue("estimate_percent", 20)
.addValue("method_opt", "FOR ALL COLUMNS SIZE 1")
.addValue("degree", 0)
.addValue("granularity", "AUTO")
.addValue("cascade", Boolean.TRUE)
.addValue("no_invalidate", Boolean.FALSE)
.addValue("force", Boolean.FALSE);
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Required input parameter 'PARTNAME' is missing
at org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl.createCallableStatement(CallableStatementCreatorFactory.java:209)
Run Code Online (Sandbox Code Playgroud)
当零件名称是根据一个可选的参数此.我也可以通过手动运行这个带有PARTNAME参数的过程来确认.
如果在特定日期之后尝试,我想编译某些文件失败.原因是:我发现了几个Y2K38错误,我现在没有时间修复它们,但是想记下它们,我认为如果编译模块之后失败会很好,说,2020年.(我可能会疯了,但这段代码已经20年了,我怀疑它可能会再存活30年)
有没有办法弄清楚哪个应用程序正在耗尽所有桌面堆内存?
有关"桌面堆"的说明,请参阅此MSDN博客.
编辑:如果您不知道"桌面堆内存"是什么,请不要回答.
EDIT2:如果您不知道"桌面堆内存"是什么,请不要投票来关闭问题.
作为背景,我目前正在为一所大学开发,我们在要求"Web 2.0内容"和可访问性要求的部门遇到问题.
基于JavaScript的大型网站如何处理508合规性?有些网站会降级,有些则需要启用JavaScript.一个决定对另一个决策有多大影响?
另外,从现实意义上讲,网站的可访问版本与"主要"版本相比应该投入多少开发时间?
假设我有一个堆如下:
77
/ \
/ \
50 60
/ \ / \
22 30 44 55
Run Code Online (Sandbox Code Playgroud)
现在,我想在此堆中插入另一个项目55.
这该怎么做?
77
/ \
/ \
55 60
/ \ / \
50 30 44 55
/
22
Run Code Online (Sandbox Code Playgroud)
77
/ \
/ \
55 60
/ \ / \
22 50 44 55
\
30
Run Code Online (Sandbox Code Playgroud)
77
/ \
/ \
50 60
/ \ / \
22 30 55 55
/
44
Run Code Online (Sandbox Code Playgroud)
哪一步是正确的?而且Why?请解释.
我使用C#使用Visual Studio 2005进行可执行构建.dumpbin报告它是x86,声称它是作为x86目标构建的.但是,当我尝试执行它时,它会以某种方式变成64位可执行文件,由任务管理器报告,进程资源管理器和procmon显示它加载了Framework64.并且最终由于未能加载32位DLL而失败.什么可能导致这种行为?
我想在我的类中隐藏一个向量字段,但允许通过其元素轻松迭代,但没有别的.这样班级的客户就可以做到
for (auto element : foo.getElements()) { }
Run Code Online (Sandbox Code Playgroud)
但不是
foo.getElements()[42];
Run Code Online (Sandbox Code Playgroud)
是否有一些简单的方法来实现这一点而不会产生新的混淆类型?
我正在尝试在64位进程中对已经映射到另一个32位进程的内存的文件使用MapViewOfFile.它失败并给我一个"访问被拒绝"错误.这是一个已知的Windows限制还是我做错了什么?相同的代码适用于2个32位进程.
代码排序如下:
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szShmName);
if (NULL == hMapFile)
{ /* failed to open - create new (this happens in the 32 bit app) */
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;
/* give access to members of administrators group */
BOOL success = ConvertStringSecurityDescriptorToSecurityDescriptor(
"D:(A;OICI;GA;;;BA)",
SDDL_REVISION_1,
&(sa.lpSecurityDescriptor),
NULL);
HANDLE hShmFile = CreateFile(FILE_XXX_SHM,
FILE_ALL_ACCESS, 0,
&sa,
OPEN_ALWAYS, 0, NULL);
hMapFile = CreateFileMapping(hShmFile, &sa, PAGE_READWRITE,
0,
SHM_SIZE,
szShmName);
CloseHandle(hShmFile);
}
// this one fails in 64 bit app …Run Code Online (Sandbox Code Playgroud) 有没有办法从pymssql结果中获取列名?如果我指定as_dict = True,我会返回一个包含所有列标题的字典,但由于它是字典,因此不会对它们进行排序.