首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取最新数据-优化SQL查询

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

Stack Overflow用户
提问于 2016-07-31 21:54:07
回答 1查看 93关注 0票数 0

为了从数据库中获取最新数据,我使用以下SQL查询。

代码语言:javascript
复制
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

下面是数据库的样子:

代码语言:javascript
复制
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的问题:

Q)为什么,当你根据关系中“多”方面的内容将输出限制在一个记录上时,你是按“一个”方订购的吗?

A),你什么意思?

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

A),你是什么意思?)

这是我的问题。如何优化SQL查询,使加载页面不需要花费将近1分钟的时间?下面是到页面的链接:https://erik-edgren.nu/discord

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-31 23:05:52

如果您仍有此问题,请尝试此选项。在列INDEX表的datetime_logged上创建一个datetime_logged例如discord。然后尝试下面的查询

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38688705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档