小编Xav*_*ver的帖子

检查 IS NOT NULL 很慢

我有以下问题:当我执行SQL语句时

\n\n
-- CTE\nWITH My_CTE AS\n(\n    SELECT [table_a].[ID]\n          ,[view_b].[val]\n    FROM [table_a]\n    LEFT JOIN [view_b] ON [a].[ID] = [b].[fk]\n)\n-- query with "is not null"\nSELECT * FROM My_CTE WHERE val IS NOT NULL\n
Run Code Online (Sandbox Code Playgroud)\n\n

执行需要8秒。在这种情况下,速度非常慢(没有 NULL 检查,查询返回 461 行,而使用 NULL 检查,查询返回 414 行,这并不算多)。

\n\n

我尝试通过使用表变量来提高速度:

\n\n
-- declare table variable\nDECLARE @test1 TABLE (ID int not null, val int null);\n\n-- CTE\nWITH My_CTE AS\n(\n    SELECT [table_a].[ID]\n          ,[view_b].[val]\n    FROM [table_a]\n    LEFT JOIN [view_b] ON [a].[ID] = [b].[fk]\n)\n-- Fill table variable\nINSERT INTO @test1 SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

6
推荐指数
1
解决办法
4558
查看次数

PE 文件中的 DOS 存根

最近,我使用十六进制编辑器分析了一些 Windows 可执行文件。PE 标头从地址 0x100 开始,因此在 PE 映像实际开始之前有 256 字节的数据。前 256 字节:

Windows 可执行文件的前 256 个字节

我了解以下有关文件结构的信息

  • 0x00 - 0x3F:这是 MZ 标头(64 字节长)。
  • 0x40 - 0x4D:这 14 个字节编码了 7 个 x86(16 位模式)指令,这些指令用于使用 DOS 系统调用(中断 0x21)在屏幕上打印“此程序无法在 DOS 模式下运行。\r\r\n” )。
  • 0x4E - 0x78:这是字符串“此程序无法在 DOS 模式下运行。\r\r\n”,末尾带有美元符号,告诉 DOS 这是字符串的结尾。
  • 0x79 - 0x7F:这些是 NULL 字节;我猜想它们是为了对齐而插入的。

所以我知道前 128 个字节是做什么用的。我的问题是:接下来的 128 字节 (0x80 - 0xFF) 有何用途?(PE 映像在它们之后从 0x100 处开始。)

windows exe dos portable-executable

5
推荐指数
1
解决办法
945
查看次数

Ada任务:任务条目中的指针

我想在Ada中创建一个任务类型(例如名为"computer"的任务类型),其中包含一些任务条目.我想创建一个任务条目,其输入参数类型为"是访问所有计算机",即指向任务类型的指针.这是可能吗?

我试着这样做:

task type computer;
type computer_ptr is access all computer;    
task type computer is
  entry init(a: computer_ptr);
end computer;
Run Code Online (Sandbox Code Playgroud)

这是在这里提出的.不幸的是,这不起作用:GNAT说"计算机"的声明冲突.

谁能想到一种方法来实现我想做的事情?

pointers ada task

4
推荐指数
1
解决办法
757
查看次数

标签 统计

ada ×1

dos ×1

exe ×1

pointers ×1

portable-executable ×1

sql ×1

sql-server ×1

t-sql ×1

task ×1

windows ×1