gpt4 book ai didi

mysql - 如何在mysql上处理大数据查询并具有更好的性能

转载 作者:行者123 更新时间:2023-11-29 19:51:03 25 4
gpt4 key购买 nike

目前,我正在尝试通过 MySQL 工作台从 2 个不同数据库模式中的三个不同表运行特定查询,但无法实现。

我目前在数据库架构中有一个 trackcompleted 表,在不同的服务器中有一个 location 表数据库。

  1. track 表收集待办事项的开始和结束。

  2. completed表保存结果

  3. location 数据库用于获取待办事项的创建和完成位置。

跟踪

+----+----------+---------------+---------------------+
| tid | user_id | function_name | track_time |
+-----+---------+---------------+---------------------+
| 1 | des | create | 2015-02-29 1 pm |
| 2 | des | complete | 2015-02-29 2 pm |
| 3 | greg | create | 2015-02-29 3 pm |
| 4 | greg | complete | 2015-02-29 4 pm |
+-----+---------+---------------+---------------------+

已完成

+-----+------+---------------------+
| tid | uid | insert_time |
+-----+------+---------------------+
| 1 | des | 2015-02-29 1 pm |
| 2 | des | 2015-02-29 2 pm |
| 3 | greg | 2015-02-29 3 pm |
| 4 | greg | 2015-02-29 4 pm |
+-----+------+---------------------+

位置

+----+----------+---------------+----------+
| tid | user_id | action | location |
+-----+---------+---------------+----------+
| 1 | des | create | subways |
| 2 | des | complete | home |
| 3 | greg | create | home |
| 4 | greg | complete | market |
+-----+---------+---------------+----------+

我能够从下面同一数据库模式中的两个表获得联接结果:

查询结果

+-----+---------+---------------+-----------------+-----+------+---------------+
| tid | user_id | function_name | track_time | tid | uid | insert_time |
+-----+---------+---------------+-----------------+-----+------+---------------+
| 2 | des | complete | 2015-02-29 1 pm | 2 | des | 15-02-29 2 pm |
| 4 | greg | complete | 2015-02-29 3 pm | 4 | greg | 15-02-29 4 pm |
+-----+---------+---------------+-----------------+-----+------+---------------+


select * from
svr1.tracking t,
svr1.completed c
where
t.user_id = c.uid
and t.tid = c.tid
and t.function_name = 'create'
and t.track_time > '2015-02-29 00:00:00'
and t.track_time < '2015-02-29 23:59:59'

但是,我的查询中还需要 location 信息,但是一天的位置表有 1.5 亿条记录,并且需要很长时间才能运行,因为我的 Mac 的 16GB 内存耗尽了,即使它们已建立索引.

我要求输出具有

user_id,
create tid,
function_name,
track_time,
create location,
complete tid,
function_name,
track_time,
location

这会给我如下的输出:

des, 1, create, 2015-02-29 1 pm, subways, 2,complete, 2015-02-29 2 pm, home

这是综合赛道信息和结果 enter image description here

用户信息

enter image description here

在位置中,ID 是用户设备的哈希 MAC 地址,我想找出每个特定用户的跟踪时间和位置记录时间。 enter image description here

我想知道实现它的最佳脚本是什么,因为使用工作台运行对我来说不起作用。

感谢您的阅读,非常感谢您的评论!!

最佳答案

我最终通过另一个问题帖子解决了这个问题: How to get latest results by date when selecting from two table?

通过将结果导出到另一个服务器数据库,我可以通过下面的代码获得我需要的内容。

SELECT
r1.uid,r1.tid,r1.insert_time,l1.location,l1.time,timeDiff
FROM
(
select
r.uid,
r.tid,
l.time,
l.location,
r.androidId,
r.insert_time,
min(abs(TIME_TO_SEC(TIMEDIFF(insert_time,l.time)))) as timeDiff
from
locationDB.track_result_submitted_mac r inner join
locationDB.location_archival_2015_09 l

on androidId = id
where

l.time > '2015-09-23 00:00:00' and l.time < '2015-09-30 23:59:59' and
r.insert_time > '2015-09-23 00:00:00' and r.insert_time < '2015-09-30 23:59:59'

and abs(TIME_TO_SEC(TIMEDIFF(insert_time,l.time))) < 18000
group by uid,tid

) as t,

indoorloc.track_result_submitted_mac r1 inner join
indoorloc.location_archival_2015_09 l1
on r1.androidId = l1.id

WHERE
(abs(TIME_TO_SEC(TIMEDIFF(r1.insert_time,l1.time)))) = t.tim and
r1.uid = t.uid and
r1.tid = t.tid

group by uid, tid

关于mysql - 如何在mysql上处理大数据查询并具有更好的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40815170/

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