sql百万、千万级数据处理。

amazingNF 2018-07-31 04:59:37
sql百万、千万级数据处理。现做查询,搜索速度很慢。而且是多表连接查询。应该怎么做优化。
...全文
540 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-08-01
  • 打赏
  • 举报
回复
引用 13 楼 amazingNF 的回复:
[quote=引用 12 楼 yenange 的回复:]
[quote=引用 11 楼 amazingNF 的回复:]
[quote=引用 10 楼 yenange 的回复:]
[quote=引用 9 楼 amazingNF 的回复:]
[quote=引用 7 楼 yenange 的回复:]
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?

条件主要是做tab1表中的几个字段[/quote]
你贴的是最终sql , 没有简化过的?
你这样, 最终出来的结果有多少行?[/quote]

360万行[/quote]

让你把全中国的人数一遍, 数快点, 一秒数完, 你能做到吗?
这么大的数据量, 没哪种数据库哪个高人能快速处理的了。
至少要分页吧。[/quote]

有分页的[/quote]
有分页, 就直接给最后的分页 sql , 不要这种半截的
amazingNF 2018-08-01
  • 打赏
  • 举报
回复
引用 12 楼 yenange 的回复:
[quote=引用 11 楼 amazingNF 的回复:]
[quote=引用 10 楼 yenange 的回复:]
[quote=引用 9 楼 amazingNF 的回复:]
[quote=引用 7 楼 yenange 的回复:]
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?

条件主要是做tab1表中的几个字段[/quote]
你贴的是最终sql , 没有简化过的?
你这样, 最终出来的结果有多少行?[/quote]

360万行[/quote]

让你把全中国的人数一遍, 数快点, 一秒数完, 你能做到吗?
这么大的数据量, 没哪种数据库哪个高人能快速处理的了。
至少要分页吧。[/quote]

有分页的
amazingNF 2018-08-01
  • 打赏
  • 举报
回复
引用 10 楼 yenange 的回复:
[quote=引用 9 楼 amazingNF 的回复:]
[quote=引用 7 楼 yenange 的回复:]
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?

条件主要是做tab1表中的几个字段[/quote]
你贴的是最终sql , 没有简化过的?
你这样, 最终出来的结果有多少行?[/quote]

360万行
吉普赛的歌 2018-08-01
  • 打赏
  • 举报
回复
引用 11 楼 amazingNF 的回复:
[quote=引用 10 楼 yenange 的回复:]
[quote=引用 9 楼 amazingNF 的回复:]
[quote=引用 7 楼 yenange 的回复:]
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?

条件主要是做tab1表中的几个字段[/quote]
你贴的是最终sql , 没有简化过的?
你这样, 最终出来的结果有多少行?[/quote]

360万行[/quote]

让你把全中国的人数一遍, 数快点, 一秒数完, 你能做到吗?
这么大的数据量, 没哪种数据库哪个高人能快速处理的了。
至少要分页吧。
吉普赛的歌 2018-07-31
  • 打赏
  • 举报
回复
引用 9 楼 amazingNF 的回复:
[quote=引用 7 楼 yenange 的回复:]
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?

条件主要是做tab1表中的几个字段[/quote]
你贴的是最终sql , 没有简化过的?
你这样, 最终出来的结果有多少行?
amazingNF 2018-07-31
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?

条件主要是做tab1表中的几个字段
amazingNF 2018-07-31
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?

默认读取所有数据,在页面上再做条件搜索,也主要是A表中的四五个字段
吉普赛的歌 2018-07-31
  • 打赏
  • 举报
回复
SELECT *
FROM tab1
LEFT JOIN tab2
ON tab1.AID = tab2.AID
LEFT JOIN tab3
ON tab3.BID = tab1.BID
INNER JOIN tab4
ON tab4.WID = tab1.WID
LEFT JOIN tab5 a
ON a.TypeID = 9
AND tab1.SID = a.ID
LEFT JOIN tab15 b
ON b.TypeID = 7
AND tab1.Age = b.ID

没有 where 条件的吗?
amazingNF 2018-07-31
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
[quote=引用 4 楼 amazingNF 的回复:]
[quote=引用 1 楼 yenange 的回复:]
贴出sql,
写明每个表的大小,
贴每个表的索引

具体事情具体分析, 空白说白话, 没有什么用的。


五张表,主表A索引为主键ID,数据量300万以上,其余四张基础信息表,数据量很小。[/quote]

觉得表名, 列名敏感, 可以用 tabName, col1, col2 代替
没 sql , 没人能给你合适的建议[/quote]

select * from tab1 left join tab2 on tab1.AID=tab2.AID left join tab3 on
tab3.BID=tab1.BID inner join tab4 on tab4.WID=tab1.WID
left join tab5 a on a.TypeID=9 and tab1.SID=a.ID left join tab15 b on b.TypeID=7 and tab1.Age=b.ID


去掉了列表,就默认查询所有列吧
吉普赛的歌 2018-07-31
  • 打赏
  • 举报
回复
引用 4 楼 amazingNF 的回复:
[quote=引用 1 楼 yenange 的回复:]
贴出sql,
写明每个表的大小,
贴每个表的索引

具体事情具体分析, 空白说白话, 没有什么用的。


五张表,主表A索引为主键ID,数据量300万以上,其余四张基础信息表,数据量很小。[/quote]

觉得表名, 列名敏感, 可以用 tabName, col1, col2 代替
没 sql , 没人能给你合适的建议
amazingNF 2018-07-31
  • 打赏
  • 举报
回复
引用 1 楼 yenange 的回复:
贴出sql,
写明每个表的大小,
贴每个表的索引

具体事情具体分析, 空白说白话, 没有什么用的。


五张表,主表A索引为主键ID,数据量300万以上,其余四张基础信息表,数据量很小。
墙头上乘凉 2018-07-31
  • 打赏
  • 举报
回复
我觉得最主要的还是索引吧,索引没用好的话很容易起到反效果。尽量避免全表扫描,考虑在 where 及 order by 涉及的列上建立索引。你可以学习一下SQL查询执行计划,从中可以看出来索引到底有没有用。
丰云 2018-07-31
  • 打赏
  • 举报
回复
引用 楼主 amazingNF 的回复:
sql百万、千万级数据处理。现做查询,搜索速度很慢。而且是多表连接查询。应该怎么做优化。


数据量到了千万级别,有些情况可以优化,比如添加索引,优化查询结构等。
有些情况没法优化,比如中间集太大,或是索引失效等情况

一句话,具体情况具体优化,不能优化的,只有从业务处理的设计上来解决
吉普赛的歌 2018-07-31
  • 打赏
  • 举报
回复
贴出sql,
写明每个表的大小,
贴每个表的索引

具体事情具体分析, 空白说白话, 没有什么用的。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧