从MySQL中获取此数据的更快方法

安德鲁·纽比(Andrew Newby)

我目前正在这样做是为了从表中获取一些数据:

SELECT DISTINCT(CategoryID),Distance FROM glinks_DistancesForTowns WHERE LinkID = $linkID ORDER BY Distance LIMIT 20

我正在为每个链接id进行迭代(奇数为50k)。我正在使用以下方法在Perl中处理它们:

my @cats;
while (my ($catid,$distance) = $sth->fetchrow) {
    push @cats, $cat;
}

我正在尝试查看是否有更好的方法可以在MySQL子查询中进行,而不是进行50k较小的查询(即每个链接一个)

该表的基本结构为:

glinks_Links
    ID
glinks_DistancesForTowns 
    LinkID
    CategoryID
    Distance

我敢肯定必须有一个简单的方法来做到这一点-但我只是没有看到它。

根据要求-这是表结构的转储。它实际上比这更复杂,但是其他字段仅包含值,因此我将那些位取出来以更清晰地查看该结构:

CREATE TABLE `glinks_DistancesForTowns` (
 `LinkID` int(11) DEFAULT NULL,
 `CategoryID` int(11) DEFAULT NULL,
 `Distance` float DEFAULT NULL,
 `isPaid` int(11) DEFAULT NULL,
 KEY `LinkID` (`LinkID`),
 KEY `CategoryID` (`CategoryID`,`isPaid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1


CREATE TABLE `glinks_Links` (
 `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `Title` varchar(100) NOT NULL DEFAULT '',
 `URL` varchar(255) NOT NULL DEFAULT 'http://',
 PRIMARY KEY (`ID`),
 KEY `booking_hotel_id_fk` (`booking_hotel_id_fk`)
) ENGINE=MyISAM AUTO_INCREMENT=617547 DEFAULT CHARSET=latin1

我希望这样的事情:

SELECT glinks_Links.ID FROM glinks_Links as links, glinks_DistancesForTowns as distance (
        SELECT DISTINCT(CategoryID),Distance FROM distance WHERE distance.LinkID = links.ID ORDER BY Distance LIMIT 20
    )

但这显然行不通;)

比尔·卡温

听起来您想要每个链接的距离排名前20位的城镇,对吗?

MySQL 8.0支持窗口函数,这将是编写查询的方式:

WITH cte AS (
  SELECT l.ID, ROW_NUMBER() OVER(PARTITION BY l.ID ORDER BY d.Distance) AS rownum
  FROM glinks_Links as l
  JOIN glinks_DistancesForTowns AS d ON d.LinkID = l.ID
) SELECT ID FROM cte WHERE rownum <= 20;

8.0之前的版本不支持SQL的这些功能,因此必须使用用户定义的变量或自联接来发挥创意。例如,请参阅我对如何选择每个类别中最新的四个项目的回答

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在python中从postgresql获取数据的更快方法

在R中汇总此数据的更快方法

从 mongo 结果中获取数据比逐字段更快的方法?

此mysql_query的更快方法

有没有更快的方法来在Linux中获取此输出文件

更快地获取大量数据的方法

在MySQL模式中存储此数据的正确方法是什么?

在Elasticsearch中覆盖数据的更快方法

在 SQL 或 MySQL 中获取 Count 或获取 Records 哪个更快?

在Swift中从数组中获取多个元素的更快方法?

如何更快地计算mySQL数据库中的条目?

在python中获取子字符串的更快方法?

从javascript中的嵌套数组获取uniq值的更快方法

与使用“申请大型数据集”相比,完成此熊猫工作更快的方法?

有没有更快的方法来生成此熊猫数据框?

在R?中合并大量数据集的更快方法

在大型数据框中逐行添加新列的更快方法

在 Pandas 数据框中的列上应用函数的更快方法

更快地提取数据框中多列字符的方法

在 Node.js 中存储静态数据的更快方法

获取数字列表的更快方法

如何更新此MySQL查询以获取正确的数据?

从mysql表中获取数据

在 MySQL 中获取数据的问题

如何从python 2.7中的此“列表”外观中获取数据

排序数据更快的方法

什么是使用查找索引从数组中获取对象或在JavaScript中获取映射键值的更快方法?

如何从PHP中的此MySQL查询响应中获取值

获取部分填充的数据在mysql中的数据