[site_list] ~100,000 行... 10mb 大小。
- site_id
- 网站网址
- site_data_most_recent_record_id
[site_list_data] ~ 15+ 百万行并且还在增长......大小约为 600mb。
- 记录ID
- site_id
- 站点连接时间
- 站点速度
- 日期检查
粗体列是唯一的索引键。
我需要返回 50 个最近更新的站点以及与之相关的最新数据 - 连接时间、速度、日期......
这是我的查询:
SELECT SQL_CALC_FOUND_ROWS
site_list.site_url,
site_list_data.site_connect_time,
site_list_data.site_speed,
site_list_data.date_checked
FROM site_list
LEFT JOIN site_list_data
ON site_list.site_data_most_recent_record_id = site_list_data.record_id
ORDER BY site_data.date_checked DESC
LIMIT 50
如果没有 ORDER BY 和 SQL_CALC_FOUND_ROWS(我需要它进行分页),查询大约需要 1.5 秒,而那些需要超过 2 秒或更长时间的查询还不够好,因为将显示此数据的特定页面正在获得 20K+ 页面浏览量/一天,这个查询显然太重了(当我把它上线时服务器几乎死了)而且太慢了。
mySQL的专家,你会怎么做?如果表达到 1 亿条记录怎么办?每 30 秒将这个巨大的结果缓存到临时表中是我得到的唯一其他解决方案。