标签: query-optimization

mysql group by 2列合并结果

我正在尝试弄清楚如何构建这个查询,但遇到了一些困难。

基本上,我试图获取一行中最常用的 id 的计数,其中 id 代表另一个表中的对象,但 id 可以出现在 2 列中。

当我只是钻一列时,这个查询工作得很好:

SELECT rb_1,
       Count(*) AS num
FROM   ci_lineups
GROUP  BY rb_1
ORDER  BY Count(*) DESC
LIMIT  10
Run Code Online (Sandbox Code Playgroud)

但现在我想做类似的事情,除了检查一个名为rb_2as well 的列,该列可以包含所有 id 的列rb_1

当我尝试按 2 列进行分组时,它仅将组视为两列的组合。

如果我使用第一个查询两次(每列一次),我可以用 PHP 编写一个快速脚本来对计数进行组合和排序,但我认为可能有一种方法可以使用 MySQL 来实现此目的。

mysql group-by query-optimization

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

SELECT COUNT(*) WHERE DATE_PART(...) 在 PostgreSQL/TimescaleDB 中速度较慢

为了查找表中每小时存在的行数temperatures,我在带有 TimescaleDB 1.6.0 扩展的 PostgreSQL 11.2 数据库上运行了一系列 SQL 查询。temperatures是一个 TimescaleDB 超表。

例如,

SELECT COUNT(*) FROM temperatures
    WHERE DATE_PART('year', "timestamp") = 2020
    AND DATE_PART('month', "timestamp") = 2
    AND DATE_PART('day', "timestamp") = 2
    AND DATE_PART('hour', "timestamp") = 0
    AND DATE_PART('minute', "timestamp") = 0
Run Code Online (Sandbox Code Playgroud)

问题:但是,这个查询似乎非常慢(我认为),每个查询大约需要 6-8 秒,并且该数据库上没有运行其他查询。该表temperatures包含 1150 万行。每小时大约有 100-2000 行。

寻找有关提高此类查询速度的建议。谢谢!

sql postgresql datetime count query-optimization

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

如何找到elasticsearch查询的执行时间

我正在使用 elasticsearch 从 Rails 应用程序中获取快速结果。我想知道执行特定查询需要多长时间?是否有任何工具可以查找和比较执行时间以便优化查询?

indexing query-optimization elasticsearch kibana

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

如何从mysql表中检索重复记录的最新数据

我正在尝试从 SQL 表中检索每条记录的最新数据。每条记录都会有重复的数据,并有一些数据变化。我需要检索最新的带时间戳的数据。有人可以建议哪个是性能方面的最佳解决方案吗?见过一些带有内部联接和子查询的解决方案。

下面给出的示例数据

Technology Students Amount Area      Date
python     500      1000   Bangalore 2021-08-06 12:03:26
Ruby       100      1000   Bangalore 2021-08-06 05:18:50
Java       300      1000   Bangalore 2021-08-06 18:23:40
python     900      1000   Bangalore 2021-08-06 16:23:30
Java       100      1000   Bangalore 2021-08-06 12:23:50
Ruby       500      1000   Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud)

我的 O/P 应该包含每种技术的最新数据

Technology Students Amount Area      Date
Java       300      1000   Bangalore 2021-08-06 18:23:40
python     900      1000   Bangalore 2021-08-06 16:23:30
Ruby       500      1000   Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud)

mysql query-optimization database-performance groupwise-maximum

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

Google BigQuery 查询超出资源限制

我正在为我的公司建立一个原始数据仓库,并且我已经成功地将联系人、公司、交易和关联数据从我们的 CRM 提取到 bigquery 中,但是当我将这些数据连接到一个主表中以通过我们的 BI 平台进行分析时,我不断收到错误:

Query exceeded resource limits. This query used 22602 CPU seconds but would charge only 40M Analysis bytes. This exceeds the ratio supported by the on-demand pricing model. Please consider moving this workload to the flat-rate reservation pricing model, which does not have this limit. 22602 CPU seconds were used, and this query must use less than 10200 CPU seconds.

因此,我正在寻求优化我的查询。我已经删除了所有GROUP BY命令ORDER BY,并尝试使用WHERE命令进行额外的过滤,但这对我来说似乎不合逻辑,因为它会增加处理需求。

我当前的查询是:

SELECT 
    coy.company_id,
    cont.contact_id,
    deals.deal_id, …
Run Code Online (Sandbox Code Playgroud)

sql etl query-optimization google-bigquery

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

Elasticsearch,搜索速度极慢

我们有一个由 3 个主节点(每个 4 核、16 GB RAM)、3 个热节点(每个 8 核、32 GB RAM、300 GB SSD)和 3 个热节点(每个 8 核、32GB RAM、1.5TB HDD)组成的集群。 。

我们按照 的命名约定为一年中的每个月都有一个索引voucher_YYYY_MMM(eg voucher_2021_JAN)。所有这些索引都有一个voucher充当读取别名的别名,我们的搜索查询针对该读取别名。

我们的索引在热节点上驻留 32 天,在此期间它将接收 99% 的写入。我们估计该索引中的数据约为 4.8 亿个文档,它有 1 个副本和 16 个分片(我们采用了 16 个分片,因为最终我们的数据会增长,现在我们正在考虑缩小到 8 个分片,每个分片有 30 GB数据,根据我们的映射,200 万个文档占用 1GB 空间)。

32天后索引将转移到温节点,目前,我们的热索引中有4.5亿个文档,温索引中有18亿个文档。文档总数达 22.5 亿篇。

我们的文档包含客户 ID 和我们正在应用过滤器的一些字段,它们全部映射为关键字类型,我们用于custom routing on customer id提高搜索速度。

我们典型的查询看起来像

GET voucher/_search?routing=1000636779&search_type=query_then_fetch
{
  "from": 0,
  "size": 20,
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "filter": [
            {
              "term": …
Run Code Online (Sandbox Code Playgroud)

performance query-optimization database-performance elasticsearch elastic-stack

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

如何识别 PostgreSQL 函数中的慢查询?

如何识别 Postgres 函数中的慢查询?

例如:

CREATE OR REPLACE FUNCTION my_function ()
RETURNS void AS $$ 
BEGIN
    query#1;
    
    query#2; --> slow query (duration 4 sec)
    
    query#3;
    
    query#4;
END
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

执行后,my_function()我在 Postgres 日志文件中得到如下内容:

持续时间:4.904 ms 语句:select my_function ();",,,,,,,,,"psql"

所以我无法识别函数中的慢速查询。

postgresql performance function plpgsql query-optimization

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

索引会加快查找最大 TIMESTAMPTZ 的速度吗?

我有一个conversation_views包含列的表:user_id | conversation_id | viewed_at

还有一个INDEX on conversation_views (conversation_id, user_id)

我想查询:

select
  max(viewed_at)
from conversation_views
where
  conversation_id=%L
  and user_id=%L
Run Code Online (Sandbox Code Playgroud)

通过此索引,该查询的性能是否良好,或者我可以使用其他策略吗?我正在使用 Postgres 9.6.12。

sql postgresql query-optimization database-indexes postgresql-9.6

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

调优多次执行简单操作的 SQL 标量函数

我有一列数据类型图像,这些值看起来与此类似:

0x...32004200460054004F005600310048003600530051003800310065003000430043005500550035003500340033003700380056004200470034003100 47004F004A00460030004C003100370030005200380054003600370045004F00320032004E005600360039004C00...

我必须仅使用图像值的特定序列。我需要将其转换为类似字符的数据类型(VARCHAR?),如下所示:

2BFTOV1H6SQ81e0CCUU554378VBG41GOJF0L170R8T67EO22NV69L

转换过程如下:

每隔两对省略一次(始终为 00),剩下的代表所需结果的 ASCII 代码(32 -> 2, 42 -> B, ...)。

我需要对此进行调整,因为我必须应用它数百万次。现在我赚了1 mio。3分钟内排。

我当前的尝试是这个 SQL 标量函数:

ALTER FUNCTION [dbo].[F_Get_CClip](@pi_content_referral_blob IMAGE)
RETURNS VARCHAR(53)
AS

BEGIN
DECLARE @l_content_referral_blob VARCHAR(107),
        @l_position INTEGER,
        @l_text_ascii VARCHAR(53)

IF NOT @pi_content_referral_blob IS NULL AND LEN(CONVERT(VARBINARY(MAX), @pi_content_referral_blob)) > 187
BEGIN
    SET @l_content_referral_blob = SUBSTRING(CONVERT(VARCHAR(188), CONVERT(VARBINARY(188), @pi_content_referral_blob)), 29, 105)
    SET @l_position = 1
    SET @l_text_ascii = '' 

    WHILE @l_position < LEN(@l_content_referral_blob) + 1
    BEGIN
        SET @l_text_ascii = @l_text_ascii + SUBSTRING(@l_content_referral_blob, @l_position, 1)
        SET @l_position …
Run Code Online (Sandbox Code Playgroud)

sql-server query-optimization user-defined-functions

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

如何加快bigquery中的范围连接

使用范围条件与同一张表进行自连接。下面是sql语句。

select 
current_rec .*
,compare_rec.employee_id as less_salary_employee
from 
hr.employees current_rec
left join hr.employees compare_rec 
on current_rec.hire_date  < compare_rec .hire_date and current_rec.salary < compare_rec.salary 
order by current_rec .employee_id ;
Run Code Online (Sandbox Code Playgroud)

对于300K记录,需要更多45~60分钟。经过谷歌搜索后,我发现 Binned range join 优化会有所帮助。我阅读这篇文章是为了提高查询性能。[https://select.dev/posts/snowflake-range-join-optimization#how-to-optimize-range-joins-in-snowflake][1]。但无法理解。有人可以解释一下吗?。特别分箱范围优化部分。如果您提供有帮助的视觉表示

sql postgresql query-optimization google-bigquery

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