小编MK.*_*MK.的帖子

oracle明确做排序

我在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)

sql oracle

10
推荐指数
1
解决办法
1733
查看次数

Spring SimpleJdbcCall默认(可选)参数

我试图调用一个存储过程,该存储过程具有默认(可选)参数而不传递它们并且它不起作用.基本上与此处描述的问题相同.

我的代码:

  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参数的过程来确认.

java spring stored-procedures jdbc

10
推荐指数
1
解决办法
7259
查看次数

c预处理器 - 如果在特定日期之后进行编译则失败

如果在特定日期之后尝试,我想编译某些文件失败.原因是:我发现了几个Y2K38错误,我现在没有时间修复它们,但是想记下它们,我认为如果编译模块之后失败会很好,说,2020年.(我可能会疯了,但这段代码已经20年了,我怀疑它可能会再存活30年)

c macros

9
推荐指数
3
解决办法
1289
查看次数

监视桌面堆内存

有没有办法弄清楚哪个应用程序正在耗尽所有桌面堆内存?

有关"桌面堆"的说明,请参阅此MSDN博客.

编辑:如果您不知道"桌面堆内存"是什么,请不要回答.

EDIT2:如果您不知道"桌面堆内存"是什么,请不要投票来关闭问题.

windows

9
推荐指数
2
解决办法
5003
查看次数

Javascript使用如何影响508合规性?

作为背景,我目前正在为一所大学开发,我们在要求"Web 2.0内容"和可访问性要求的部门遇到问题.

基于JavaScript的大型网站如何处理508合规性?有些网站会降级,有些则需要启用JavaScript.一个决定对另一个决策有多大影响?

另外,从现实意义上讲,网站的可访问版本与"主要"版本相比应该投入多少开发时间?

accessibility section508 dynamic

8
推荐指数
2
解决办法
3835
查看次数

如何创建堆?

假设我有一个堆如下:

     77
    /  \
   /    \
  50    60
 / \    / \
22 30  44 55
Run Code Online (Sandbox Code Playgroud)

现在,我想在此堆中插入另一个项目55.

这该怎么做?

选项1.

         77
        /  \
       /    \
      55    60
     / \    / \
    50 30  44 55
   /
  22
Run Code Online (Sandbox Code Playgroud)

选项2.

     77
    /  \
   /    \
  55    60
 / \    / \
22 50  44 55
     \
     30
Run Code Online (Sandbox Code Playgroud)

选项3.

     77
    /  \
   /    \
  50    60
 / \    / \
22 30  55 55
      /
     44
Run Code Online (Sandbox Code Playgroud)

哪一步是正确的?而且Why?请解释.

heap data-structures

8
推荐指数
1
解决办法
8266
查看次数

32/64位与.NET可执行文件的混淆

我使用C#使用Visual Studio 2005进行可执行构建.dumpbin报告它是x86,声称它是作为x86目标构建的.但是,当我尝试执行它时,它会以某种方式变成64位可执行文件,由任务管理器报告,进程资源管理器和procmon显示它加载了Framework64.并且最终由于未能加载32位DLL而失败.什么可能导致这种行为?

.net c# 32bit-64bit

8
推荐指数
1
解决办法
1388
查看次数

封装std :: vector以允许迭代,但没有别的

我想在我的类中隐藏一个向量字段,但允许通过其元素轻松迭代,但没有别的.这样班级的客户就可以做到

for (auto element : foo.getElements()) { }
Run Code Online (Sandbox Code Playgroud)

但不是

foo.getElements()[42];
Run Code Online (Sandbox Code Playgroud)

是否有一些简单的方法来实现这一点而不会产生新的混淆类型?

c++

8
推荐指数
2
解决办法
599
查看次数

MapViewOfFile在32位和64位进程之间共享

我正在尝试在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)

c++ windows 64-bit memory-mapped-files 32bit-64bit

7
推荐指数
1
解决办法
5481
查看次数

使用pymssql从查询结果中获取列名

有没有办法从pymssql结果中获取列名?如果我指定as_dict = True,我会返回一个包含所有列标题的字典,但由于它是字典,因此不会对它们进行排序.

python database pymssql

7
推荐指数
2
解决办法
1万
查看次数