繁体   English   中英

获取最新数据-优化SQL查询

[英]Get the latest data - optimize the SQL query

我正在使用以下SQL查询以便从数据库中获取最新数据。

SELECT d.id AS id_d,
       d.id_user AS id_du,
       d.id_channel AS id_dc,
       d.datetime_logged AS logged

FROM discord AS d
JOIN discord_users AS du
ON d.id_user = du.id
WHERE datetime_logged IN (SELECT MAX(datetime_logged) FROM discord)
ORDER BY du.data_name ASC

数据库的外观如下:

CREATE TABLE IF NOT EXISTS `discord` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_user` int(11) NOT NULL,
  `id_channel` varchar(50) NOT NULL,
  `id_game` int(11) NOT NULL,
  `data_muted_server` tinyint(4) NOT NULL,
  `data_muted_self` tinyint(4) NOT NULL,
  `data_deafen_server` tinyint(4) NOT NULL,
  `data_deafen_self` tinyint(4) NOT NULL,
  `data_suppressed` tinyint(4) NOT NULL,
  `data_status` varchar(10) NOT NULL,
  `data_game` text,
  `datetime_logged` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)

CREATE TABLE IF NOT EXISTS `discord_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data_id` text NOT NULL,
  `data_name` varchar(50) NOT NULL,
  `data_avatar` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)

该查询需要“年龄”来加载。 但是,如果我删除WHERE datetime_logged IN (SELECT MAX(datetime_logged) FROM discord)并向查询中添加LIMIT 10 ,则页面加载速度非常快!


SQL查询的目的是仅从表discord获取最新数据。 由于数据仅每15分钟更新一次,因此查询将轻松获取最新数据。

discorddiscord_users的关系是discord需要来自discord_users的ID才能从用户获取信息。

进一步回答symcbean的问题:

问)为什么当您显然基于关系的“许多”方面的内容将输出限制为单个记录时,您是否按“一个”方面进行排序?

A)你是什么意思?

问)为什么在表上没有差异索引的情况下在discord_users表上打开2个游标?

A)再一次,您是什么意思? :)


所以这是我的问题。 如何优化我的SQL查询,以使加载页面几乎不需要1分钟? 这是页面的链接: https : //erik-edgren.nu/discord

如果仍然有问题,请尝试此选项。 创建INDEX说如index_datelog在列datetime_loggeddiscord表。 然后尝试下面的查询

SELECT 
    d.id AS id_d, d.id_user AS id_du, d.id_channel AS id_dc, d.datetime_logged AS logged 
FROM 
    discord d 
JOIN 
    discord_users du ON d.id_user = du.id USE INDEX(index_datelog))
WHERE 
    d. datetime_logged = (SELECT MAX(datetime_logged) FROM discord)
ORDER BY d.datetime_logged ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM