标签: query-optimization

传入一大串Guid

我有一个有两个问题的存储过程。

  1. 它有 40 个参数。我知道第一条评论是重新设计我的存储过程,使其没有 40 个参数。然而,这是一个带有大标准部分的搜索表单。因此,用户最多可以指定 40 个不同的搜索条件。然后我们将这些值作为参数传递。现在我有一个 40 个参数的存储过程。将它们作为 XML 参数传递并在内部或表参数中解析它是否会更有效(我们仍在运行 SQL 2k5,但正在考虑升级到 2k12)。

  2. 我的三个参数是由引号和逗号分隔的 Guid 值的长字符串。基本上,用户会看到一个产品线列表,有时有数百个。然后他们单击想要搜索的内容。我们限制了他们可以检查的行数,只是因为字符串太长,但我们传递了一长串由引号和逗号分隔的 Guid。我知道这不是正确的方法。用于传递像这样的 Guid 值的数组或集合的标准 Trans SQl 模式是什么?40 个领域中,我有 3 个独立领域在做这件事。我们希望更有效地做到这一点,并且能够传递超出当前限制的内容。

sql t-sql sql-server sql-server-2005 query-optimization

0
推荐指数
1
解决办法
4066
查看次数

复合索引是否适用于连接(多对多)?

tt - 是一个映射表。 tt结构是

表_1 | 表_2 | 表3

   SELECT t1.foo1, t2.foo2, t3.foo3 FROM tt 
        JOIN table1 t1 ON tt.table_1 = t1.id
        JOIN table2 t2 ON tt.table_2 = t2.id
        JOIN table3 t3 ON tt.table_3 = t3.id
    WHERE t2.value = 'test'
Run Code Online (Sandbox Code Playgroud)

该指数是否有意义并且会发挥作用tt?综合指数为ix_table_1__table_2__table_3(table1, table2, table_3)

如果这样做 - 为什么,如果不这样做 - 为什么?

mysql sql indexing join query-optimization

0
推荐指数
1
解决办法
2274
查看次数

MySQL DATEDIFF函数VS比较INTERVAL DAY

DATEDIFF函数和直接减去INTERVAL DAY有什么区别?

  1. SELECT * FROM table WHERE DATEDIFF(CURDATE(), publish_date) <= 3

  2. SELECT * FROM table WHERE publish_date >= CURDATE() - INTERVAL 3 DAY

结果数据是一样的,但似乎2.方法更快一点?

mysql sql performance query-optimization where-clause

0
推荐指数
1
解决办法
515
查看次数

如何使 Athena SQL 查询更快

我在基于 PrestoDB 的 AWS Athena 上运行它。我原本的计划是查询3个月前的数据来分析这些数据。然而,即使是过去2个小时的查询时间也需要超过30分钟,此时查询就会超时。有没有更有效的方法来执行查询?

SELECT column1, dt, column 2
FROM database1
WHERE date_parse(dt, '%Y%m%d%H%i%s') > CAST(now() - interval '1' hour AS timestamp)
Run Code Online (Sandbox Code Playgroud)

日期列以字符串形式记录YYYYmmddhhmmss

string datetime query-optimization where-clause presto

0
推荐指数
1
解决办法
755
查看次数

在 where 和 orderby 子句中使用两个单列索引

我用谷歌搜索了很多,但找不到我的问题的明确答案

假设我们有这个查询

SELECT * WHERE user_id = x ORDER BY date_created
Run Code Online (Sandbox Code Playgroud)

如果我们在 user_id 上有一个单列索引,在 date_created 上有另一个单列索引,优化器是否会使用这两个索引?或者只是 user_id 索引?

mysql sql indexing query-optimization where-clause

0
推荐指数
1
解决办法
543
查看次数

REGEXP_LIKE 的任何替代方案,因为它会导致性能问题

我们有一个 sql 性能不佳。我已经修复了执行计划,但 REGEXP_LIKE 导致高缓冲区获取,并且还在运行时做出贡献。我可以在 sql 中使用的任何替代方案。问题是 AND REGEXP_LIKE (xx3la. assembly_type, '^I ..*')

/* Formatted on 1/6/2023 2:07:28 PM (QP5 v5.318) */
SELECT 1
  FROM apps.oe_order_lines_all  ola
       JOIN APPS.OE_order_headers_all oh
           ON oh.Header_Id = ola.header_id AND oh.org_id = ola.org_id
       JOIN inv.mtl_parameters org
           ON ola.ship_from_org_id = org.ORGANIZATION_ID
       INNER JOIN ont.oe_transaction_types_tl tt
           ON     tt.transaction_type_id = oh.order_type_id
              AND tt.language = 'US'
              AND LPAD (UPPER (tt.name), 4) NOT IN ('TRIA',
                                                    'WARR',
                                                    'REPA',
                                                    'DUMM',
                                                    'DEMO',
                                                    'GOOD',
                                                    'INTE',
                                                    'CRED',
                                                    'EVAL',
                                                    'INVO')      --- ('STAND')
       JOIN apps.mtl_system_items_b msib
           ON …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql query-optimization

0
推荐指数
1
解决办法
71
查看次数

在 SQL Server 数据库中按日期搜索的最有效方法

在 SQL Server 数据库中,我有一个包含一DateTime列的表,我想获取特定日期的行。

我发现了很多选择,例如:

  1. WHERE myColumn BETWEEN '2020-10-10T00:00:00.00' AND '2020-10-10T23:59:59.999'
  2. WHERE CAST(myColumn AS date) = '2020-10-10'
  3. WHERE date LIKE '%2020-10-10%'

...

其中哪一个最快?

sql t-sql sql-server query-optimization

0
推荐指数
1
解决办法
656
查看次数

Oracle SQL中的查询优化

假设我有一个像这样的oracle数据库模式:
tournaments(id,name)player(id,name)gameinfo(id,pid(引用players.id),tid(引用tournaments.id),日期)
所以在gameinfo表意味着某个玩家在给定日期的比赛中玩某个游戏.锦标赛有大约20个记录,玩家大约有16万,游戏信息大约有200万.我必须写一个查询列出锦标赛(tid在1-4范围内)以及参加该锦标赛的第一场比赛的球员数量.
我想出了以下查询:

select tid, count(pid)
from gameinfo g
where g.date = (select min(date) from gameinfo g1 where g1.player = g.player)
and g.tid in (1,2,3,4) group by tid;

这显然不是最理想的(它运行了大约58分钟).我有另一个想法,我可以看到:

select pid, tid, min(date)
from gameinfo
where tid in(1,2,3,4)
group by pid, tid;

并在此视图上运行我的查询,因为它只有大约60万条记录,但这似乎仍然不是最优的.

你能就如何优化这个提出任何建议吗?

sql oracle query-optimization

-1
推荐指数
1
解决办法
189
查看次数

SQL Server排名查询优化

我正在尝试优化查询以从DB获取特定国家/地区的用户的排名.目前看来效率很低.

我正在努力确定可以采取哪些措施来改进它.

这是当前的SQL:

SELECT COUNT(*) + 1
FROM leaderboard lb, users u
WHERE u.country = 'United States' 
  AND lb.id = u.id 
  AND lb.score + 1 > (SELECT lb2.score 
                      FROM leaderboard lb2
                      WHERE lb2.id = some_user_id);
Run Code Online (Sandbox Code Playgroud)

细节:

Users 表:

  • id 是主键
  • country 列已编入索引

Leadeboard 表:

  • id 是主键
  • score 列已编入索引

在此输入图像描述

执行计划显示2个警告:

没有统计数据的列:[dbo].[排行榜] .id(成本23%)

没有统计数据的列:[dbo].[用户] .id(成本28%)

sql t-sql sql-server query-optimization ranking

-1
推荐指数
1
解决办法
935
查看次数

使用hibernate检查数据库表中某些记录的最快方法

我有使用hibernate orm与db一起工作的java应用程序?那么什么是在db中检查记录(映射到hibernate对象)的presense的最快方法

java hibernate query-optimization

-2
推荐指数
1
解决办法
4238
查看次数

大规模表中的查询优化

我有一张包含实体店的桌子.该表大约有1500万行,有30列.

现在,当用户键入商店名称时检索商店的查询时间大约是15到20秒(我们显示自动完成列表,以便用户可以直接从列表中选择).

我想达到2-3秒的查询时间,这样用户就不会感到沮丧.

我应该采取什么行动来实现这一目标?(我目前在Linode上使用MySql数据库......也许在Simple DB上会有帮助吗?)

mysql performance query-optimization

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

PHP替换MySQL Now()

我做了很多问题,比如:

SELECT THIS
FROM THAT
WHERE ROW_TIME < NOW()
Run Code Online (Sandbox Code Playgroud)

如何在PHP中创建包含当前时间的变量,以便我可以使其工作:

SELECT THIS
FROM THAT
WHERE ROW_TIME < '$variable'
Run Code Online (Sandbox Code Playgroud)

php mysql optimization performance query-optimization

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

性能问题-集合会提高性能吗?

我遇到了性能问题,也许您可​​以帮忙。当我打开游标时,然后运行其他几个SELECT语句以使用游标中的变量来检索值(请参见下文)。这似乎减慢了整个过程。我认为这是因为PL / SQL和SQL引擎之间的切换。使用表集合会有所帮助吗?但是,正如我所看到的,由于我需要来自不同表的不同列,因此我需要具有多个不同的集合,如何在一条记录中输出所有内容以返回结果集?

CREATE OR REPLACE procedure sp_test (in_input in number)  
as 
  v_calc number;
  v_calc_res number;
  v1 number;
  v2 number;
  v3 number;
  CURSOR C_test IS 
    select col1 from test where col1 = in_input;
begin
  open c_test
  loop
    fetch c_test into v_calc;

    select col1 into v1 from t1;

    select col1 into v2 from t2;

    select col1 into v3 from t3;

    v_calc_res := v_calc * 5 * v1 * v2 * v3;

    dbms_output.put_line(v_calc_res);

  end loop;
end sp_test;
/
Run Code Online (Sandbox Code Playgroud)

oracle performance plsql query-optimization

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