对于最简单的情况,我们都提到:
select id from mytbl
group by id
Run Code Online (Sandbox Code Playgroud)
和
select distinct id from mytbl
Run Code Online (Sandbox Code Playgroud)
正如我们所知,它们会生成相同的查询计划,这些计划在某些项目中反复提及,例如哪个更好:Distinct或Group By
然而,在蜂巢中,前者只有一个减少任务,而后者有许多.
通过实验,我发现GROUP BY 比DISTINCT快10倍.
它们是不同的.
所以我学到的是:
无论如何,GROUP-BY并不比DISTINCT差,有时它更好.
我想知道:
1.如果这个结论是真的.
2.如果为真,我会将DISTINCT视为一种方便的逻辑方法,但为什么DISTINCT不采用GROUP-BY更好的实现?
3.如果不对,我会非常渴望知道它在大数据情况下的体面使用.
非常感谢你!!:)
例如x86指令:push可以精确地描述为:
push:\nsub esp, data_size\nmov [esp], data\nRun Code Online (Sandbox Code Playgroud)\n\n并且call可以描述为:
call:\npush (eip+2)\njmp addr\nRun Code Online (Sandbox Code Playgroud)\n\n通过了解这些,我们将完全清楚这些指令如何影响堆栈、寄存器和标志,我认为这是至关重要的。
\n\n然而,在阅读《Intel\xc2\xae 64 和 IA-32 架构软件开发人员\xe2\x80\x99s 手册》之后。和“i386程序员手册”我没有找到有关INT指令的确切行为的信息。
\n\n现在,我想在 INT 调用后修改堆栈,使我的程序返回到另一个地方。
\n\n那么,INT被调用之后到底做了什么呢?
\n\n(由程序员或硬件。我听说他们的行为不同)
\n\n提前致谢!!
\n\n\n附:
\n\n据我所知,INT 按某种顺序推送 eip、4 个通用寄存器、eflags 和一些奇怪的东西。
\n\n我观察到当我调用它时它在堆栈上消耗了 6 个字节,
\n\n当硬件触发时,它消耗18个字节。(如时钟)
\n\n补充:我的代码
\n\n\n
\n\n- \n
将 ivt 0x1ch(系统定时器 Tick) 挂钩到我的函数 [foo]
- \n
科学技术
- \n
跳$
- \n
foo: 打印\'A\'
\n …
jmp $我在进入之前检查堆栈foo