gpt4 book ai didi

mysql - 连接多个表会使查询运行时间过长

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:28 26 4
gpt4 key购买 nike

我有几个表,包含(a.o.)以下字段:

tweets:
--------------------------
tweet_id ticker created_at
--------------------------
1 1 1298063318
2 1 1298053197

stocks:
---------------------------------
ticker date close volume
---------------------------------
1 1313013600 12.25 40370600
1 1312927200 11.60 37281300

wiki:
-----------------------
ticker date views
-----------------------
1 1296514800 550
1 1296601200 504

我想汇总每天的推文数量、关闭、数量和浏览量(对于由 ticker = 1 标识的行)。推文表领先,这意味着如果某个日期没有推文,则当天的收盘价、交易量和浏览量都无关紧要。换句话说,我希望查询的输出类似于:

-------------------------------------
date tweets close volume views
-------------------------------------
2011-02-13 4533 12.25 40370600 550
2011-02-14 6534 11.60 53543564 340
2011-02-16 5333 13.10 56464333 664

在此示例输出中,2011 年 2 月 15 日没有推文,因此不需要当天的其余数据。到目前为止,我的查询是:

SELECT 
DATE_FORMAT(FROM_UNIXTIME(tweets.created_at), '%Y-%m-%d') AS date,
COUNT(tweets.tweet_id) AS tweets,
stocks.close,
stocks.volume,
wiki.views
FROM tweets
LEFT JOIN stocks ON tweets.ticker = stocks.ticker
LEFT JOIN wiki ON tweets.ticker = wiki.ticker
WHERE tweets.ticker = 1
GROUP BY date
ORDER BY date ASC

有人可以验证这个查询是否正确吗?它不会遇到任何错误,但会卡住我的电脑。也许我应该在这里或那里设置一个索引,可能在“代码”列上?

[编辑]

根据要求,表定义:

CREATE TABLE `stocks` (
`ticker` int(3) NOT NULL,
`date` int(10) NOT NULL,
`open` decimal(8,2) NOT NULL,
`high` decimal(8,2) NOT NULL,
`low` decimal(8,2) NOT NULL,
`close` decimal(8,2) NOT NULL,
`volume` int(8) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `tweets` (
`tweet_id` int(11) NOT NULL AUTO_INCREMENT,
`ticker` varchar(5) NOT NULL,
`id_str` varchar(18) NOT NULL,
`created_at` int(10) NOT NULL,
`from_user` int(11) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`tweet_id`),
KEY `id_str` (`id_str`),
KEY `from_user` (`from_user`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `wiki` (
`ticker` int(3) NOT NULL,
`date` int(11) NOT NULL,
`views` int(6) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

希望对您有所帮助。

最佳答案

关于索引,您是对的,如果没有 ticker 上的索引,您将不得不在所有表中进行 where-search,如果它们很大,那将花费很多时间。

我建议你打开logging of all queries that run without index至少时不时地发现查询,如果不是已经很慢,那么当数据增加时会很慢。

使用 [EXPLAIN SELECT ...][2] 检查查询如果你发现它们很慢,学习如何解释结果(不容易但很重要)以了解在哪里放置新索引。

关于mysql - 连接多个表会使查询运行时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com