小编Luk*_*der的帖子

在MS-SQL中是否有'START AT'等价物?

某些数据库支持以下命令:

SELECT TOP 10 START AT 10 * FROM <TABLE>
Run Code Online (Sandbox Code Playgroud)

基本上我需要拉出前10个记录,然后是接下来的10个记录,然后是接下来的10个等等.也许有另一种方法可以做到这一点,但过去我已经像上面那样支持'START AT'的数据库了.

sql sql-server

10
推荐指数
2
解决办法
8086
查看次数

在Sybase ASE中进行升级(更新或插入)?

我正在编写一个应用程序来将数据从Oracle移动到Sybase,并且需要执行更新/插入操作.在Oracle中,我使用MERGE INTO,但它似乎在Sybase中不可用(无论如何都不在ASE中).我知道这可以用多个语句完成,但由于几个原因,我真的想把它变成一个语句.

有什么建议?

sql upsert sybase-ase

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

权威的SQL标准文档

我很好奇,想知道各种SQL标准的,即一些更多的细节SQL-92,SQL:99,SQL:2003,SQL:2008等有一个短期和有用的概述维基百科,链接到非常昂贵的文件.为什么这些文件不向公众开放?我能找到一些公开免费的信息吗?

请不要发布您在Google上找到的链接.我只对某些权威文档感兴趣.

sql sql-standards

10
推荐指数
2
解决办法
2691
查看次数

Oracle中分页查询的速度

这对我来说是一个永无止境的话题,我想知道我是否会忽视某些事情.基本上我在应用程序中使用两种类型的SQL语句:

  1. 具有"后备"限制的常规查询
  2. 排序和分页查询

现在,我们正在谈论针对具有数百万条记录的表的一些查询,加入另外5个具有数百万条记录的表.显然,我们几乎不想获取所有这些,这就是为什么我们有上述两种方法来限制用户查询.

案例1非常简单.我们只添加一个额外的ROWNUM过滤器:

WHERE ...
  AND ROWNUM < ?
Run Code Online (Sandbox Code Playgroud)

这是非常快的,因为Oracle的CBO将考虑其执行计划考虑此过滤器,并可能应用一个FIRST_ROWS操作(类似于/*+FIRST_ROWS*/提示强制执行的操作).

然而,案例2对Oracle来说有点棘手,因为LIMIT ... OFFSET其他RDBMS中没有任何条款.因此,我们将"业务"查询嵌套在技术包装器中:

SELECT outer.* FROM (
  SELECT * FROM (
    SELECT inner.*, ROWNUM as RNUM, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS
    FROM (
      [... USER SORTED business query ...]
    ) inner
  ) 
  WHERE ROWNUM < ?
) outer
WHERE outer.RNUM > ?
Run Code Online (Sandbox Code Playgroud)

请注意,TOTAL_ROWS即使不获取所有数据,也会计算该字段以了解我们将拥有多少页.现在这个分页查询通常非常令人满意.但是时不时(正如我所说,在查询5M +记录时,可能包括非索引搜索),这运行2-3分钟.

编辑:请注意,潜在的瓶颈并不容易规避,因为在分页之前必须应用排序!

我想知道,这是最先进的模拟LIMIT ... OFFSET,包括TOTAL_ROWS在Oracle中,还是有更好的解决方案,设计会更快,例如使用ROW_NUMBER() …

sql performance oracle11g rownum window-functions

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

是否存在类似于DETERMINISTIC的PL/SQL编译指示,但是对于单个SQL SELECT的范围?

在SQL SELECT语句中,我想执行一个对该SELECT语句范围具有确定性的函数(或者事务也可以):

select t.x, t.y, my_function(t.x) from t
Run Code Online (Sandbox Code Playgroud)

许多值t.x都是相同的,因此Oracle可以省略一次又一次地调用相同的函数,以加快速度.但是如果我将函数标记为DETERMINISTIC,则可以在此查询的多次执行之间缓存结果.我无法使用的原因DETERMINISTIC是因为my_function使用了不时更改的配置参数.

我可以使用其他任何关键字吗?是否有任何我应该注意的问题(内存问题,并发性等)?或者也许任何其他技巧,例如分析函数,每个t.x值只调用一次函数(没有重大的性能影响)?

oracle optimization plsql deterministic stored-functions

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

让Oracle将OR连接的谓词转换为UNION ALL操作

UNION在某些情况下,UNION ALL查询可以胜过使用OR-connected谓词的等效查询.据我所知,这部分是因为子UNION选择可以并行执行,因此它们可以有自己的特定于OR连接谓词的每个部分的"子计划" ,由于更简单的适用查询转换,这可能更加优化.

但是OR,即使将子查询因子应用于UNION ALL解决方案,写连接谓词通常也更具可读性和简洁性.我的问题是:有没有办法向Oracle表明,应该将单个昂贵的OR连接谓词转换为UNION ALL操作?如果有这样的提示/方法,在什么情况下可以应用它(例如,是否需要在谓词中涉及的列上出现任何约束等)?一个例子:

CREATE TABLE a AS
  SELECT 1 x, 2 y FROM DUAL UNION ALL
  SELECT 2 x, 1 y FROM DUAL;

-- This query...
SELECT * FROM a
WHERE x = 1 OR y = 1

-- Is sometimes outperformed by this one, for more complex table sources...
-- Note: in my case, I can safely apply UNION …
Run Code Online (Sandbox Code Playgroud)

sql oracle optimization union union-all

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

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

动态创建JOOQ查询

我需要根据参数集动态创建JOOQ SELECT查询.我不知道如何动态追加它.请帮忙

提前致谢.

java sql jooq

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

如何使用JOOQ启动事务和回滚?

是! 我已经阅读了有关的文档

  • jOOQ永远不会在Connection上提交或回滚(如果CSV导入除外,如果在Import API中明确配置)
  • jOOQ永远不会开始任何交易.
  • ...

但是当我需要一些交易管理时,最好的做法是什么?

我说过我是JOOQ方式的忠实粉丝吗?

java sql transactions jooq

10
推荐指数
2
解决办法
6548
查看次数

H2 - 如何创建将行更改记录到另一个表的数据库触发器?

如何在H2中创建将行更改记录到另一个表的数据库触发器?

在MySQL中,这可以很容易地完成:

CREATE TRIGGER `trigger` BEFORE UPDATE ON `table`
  FOR EACH ROW BEGIN
    INSERT INTO `log`
    (
      `field1`
      `field2`,
      ...
    )
    VALUES
    (
      NEW.`field1`,
      NEW.`field2`,
      ...
    ) ;
    END;
Run Code Online (Sandbox Code Playgroud)

java sql triggers h2 jooq

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