![]() |
1
5
使用第一个。这将允许一个查询计划被正确地缓存,除了您应该使用SQL的方式之外。 第二个是SQL注入攻击,除了其他问题。
而且,你自己也注意到,维护的负担也更高。 |
![]() |
2
4
第二种方法有一个明显的缺点,即在编译时不进行语法检查。但是,它确实允许使用动态ORDERBY子句,而第一个子句不允许这样做。我建议您始终使用第一个示例,除非您有充分的理由使查询成为动态的。而且,正如@Oded已经指出的那样,如果您选择第二种方法,那么一定要防止sql注入。 |
![]() |
3
1
考虑到这一点,有时您无法避免构造一个SQL语句,特别是当where子句和连接依赖于传入的参数时。根据我的经验,我发现为exec创建大型、可变连接/whered语句的存储过程正试图做太多的事情。在这种情况下,我建议你记住单一责任原则。 |
![]() |
4
1
在存储过程中执行动态SQL会将使用存储过程的值降低为仅保存查询容器。存储过程最大的好处是,查询执行计划(一个非常昂贵的操作)在第一次执行过程时被编译并存储在内存中。这意味着过程的每个后续执行都绕过查询计划计算,直接跳到操作的数据检索部分。
|
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |