mysql row_number()性能

发布于 2025-02-07 01:06:12 字数 2645 浏览 1 评论 0原文

对不起。这是一个重写的问题,因为没有答案。

我将其从rank()更改为row_number(),因为不需要相同的等级。


我目前正在研究查询,但我没有达到速度,所以我问一个问题。

我想找到的是“按Dataid计数每个类别中的最多名称”。

data_category { id:int主键auto_increment, dataid:int, 名称:Varchar2(200), 类别:varchar2(200) }

,可以重复输入。

select dataId, name, category, count(*) as cnt
, row_number() over (partition by dataId, category order by count(*) desc) as "ranking"
from data_category
group by dataId, name, category

在上述查询中,有和没有等级部分的速度有差异。

如果没有行_number,则需要0.0053,如果有的话,则需要0.5秒。 结果约为260,000行。

select *, row_number() over (partition by A.dataId, A.category order by cnt desc) as "ranking"
from(
  select dataId, name, category, count(*) as cnt
  from data_category
  group by dataId, name, category
) A

以上查询也得出几乎相同的速度。将其包裹在精选语句中的那一刻,由于临时的表创建,它正在放慢速度。

数据约为40万例。

索引是(Dataid,类别,名称)。

我想通过数据ID提取5个名称数量最高的名称,但我无法弄清查询的方向。

我将使用此查询创建“视图”。 因此,没有其他条款。 之后,我想通过与另一个表一起使用它来使用它。

即使您不编写查询,我也真诚地要求一个简单的提示。

输出:

Dataid类别名称等级
1CATE1NAME1_11
1CATE1NAME1_22
1CATE1CATE1 NAME1 name1_34
1 1CATE2NAME2_11
1CATE2NAME2 NAME2 NAME2_52
1CATE2NAME22_3NAME1_5 3
13 2 CATE2NAME2_33
2CATE1 CATE1 CATE1NAME3_1 NAME3_12
NAME3CATE3 NAME3_91

感谢您。


解释

#Query 1-2:没有rank_row

IDselect_type类型过滤额外
1简单data_cateogoryindexidx_39EA6497EA6CA40D9E783E432344100.00使用index;

#Query 1-1:使用Rank_row

IDSelect_Type类型过滤额外
1简单data_cateogoryindexidx_39EA6497EA6CA40D9E783E432344100.00使用索引;使用临时;使用filesort

Sorry. This is a rewritten question because there was no answer.

I changed it from rank() to row_number() because the same rank is not needed.


I'm currently working on a query, but I'm not getting the speed so I'm asking a question.

What I want to find is 'count the most names in each category by DataID'.

Data_Category {
id : INT PRIMARY KEY AUTO_INCREMENT,
DataId: INT,
name: varchar2(200),
category: varchar2(200)
}

and it is possible to input in duplicate.

select dataId, name, category, count(*) as cnt
, row_number() over (partition by dataId, category order by count(*) desc) as "ranking"
from data_category
group by dataId, name, category

In the above query, there is a difference in speed with and without the rank part.

If there is no row_number, it takes 0.0053, and if there is, it takes 0.5 seconds.
The result is about 260,000 rows.

select *, row_number() over (partition by A.dataId, A.category order by cnt desc) as "ranking"
from(
  select dataId, name, category, count(*) as cnt
  from data_category
  group by dataId, name, category
) A

The above query also yields almost the same speed. The moment it is wrapped in a select statement, it is slowing down due to the temporary table creation.

The data is about 400,000 cases.

The index is (dataId, category, name) .

I want to extract 5 names with the highest number of names in each category by data ID, but I can't figure out the direction of the query.

And I will create 'view' using this query.
So there are no additional where clause.
After that, I want to use it by joining it with another table.

Even if you don't write a query, I sincerely ask for a simple hint..!

Output:

dataIdcategorynamerank
1cate1name1_11
1cate1name1_22
1cate1name1_53
1cate1name1_34
1cate2name2_11
1cate2name2_52
1cate2name2_33
2cate1name3_11
2cate3name3_91

Thank you.


Explain

#Query 1-2 : Without rank_row

idselect_typetabletypekeyrowsfilteredextra
1SIMPLEdata_cateogoryindexIDX_39ea6497ea9ca40d9e783e432344100.00Using index;

#Query 1-1 : With rank_row

idselect_typetabletypekeyrowsfilteredextra
1SIMPLEdata_cateogoryindexIDX_39ea6497ea9ca40d9e783e432344100.00Using index; Using temporary; Using filesort

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你穿错了嫁妆 2025-02-14 01:06:12

这会给您您需要的东西吗?

SELECT DataID, category, COUNT(*)
    FROM t
    GROUP BY DataID, category;

或者,如果name具有重复项,请替换count(*) by count(distract name)

Does this give you what you need?

SELECT DataID, category, COUNT(*)
    FROM t
    GROUP BY DataID, category;

Or, if name has duplicates, replace COUNT(*) by COUNT(DISTINCT name)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文