欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

mysql执行多表查询,大数据,sql该怎么写。

程序员文章站 2022-04-30 13:52:59
...
假设两个表 A B。两个表结构相同。现在要取出A表的所有字段和B表的set,rutime字段。两个表的ID相同。

因为数据量比较大,两个表在100w左右,之后还可能会有多个这样大的表。
我在phpmyadmin中拿

select * from A as a,B as b where a.haoma = b.haoma

测试的时候就已经跑死掉了。哪位大虾帮助写一下这个sql

回复讨论(解决方案)

select ecs_ershi.* ,ecs_erjiu.set from ecs_ershi inner join ecs_erjiu on ecs_ershi.haoma=ecs_erjiu.haoma limit 0,29

我写了这个语句,查询成功了。但是数据量一大,就死在那了。
我想将查询出来的数据存储到C表,有什么好方法可以?

does it has indexes on A.haoma and B.haoma?

does it has indexes on A.haoma and B.haoma?
亲,可以解释下什么意思不。

A.haoma 与 B.haoma 建索引了吗?

不建索引,作死!!!

haoma 是主键么,如果不是的话建立索引试试。

select * from A as a,B as b where a.haoma = b.haoma
只要在 haoma 上都建有索引,查询只是瞬间的事情
但是输出可是要很花一些时间的!
你把100万条记录都打印出来吗?显然是脑袋有毛病了

直接
insert into c(......)
select ecs_ershi.* ,ecs_erjiu.set
from ecs_ershi inner join ecs_erjiu on ecs_ershi.haoma=ecs_erjiu.haoma
limit 0,29
即可,

不要输出。。。

select * from A as a,B as b where a.haoma = b.haoma
只要在 haoma 上都建有索引,查询只是瞬间的事情
但是输出可是要很花一些时间的!
你把100万条记录都打印出来吗?显然是脑袋有毛病了
膜拜大神,我是来拿分的。

select * from A as a,B as b where a.haoma = b.haoma
只要在 haoma 上都建有索引,查询只是瞬间的事情
但是输出可是要很花一些时间的!
你把100万条记录都打印出来吗?显然是脑袋有毛病了
那查询出来之后除了做分页处理之后还能做什么比较快速的可以打印出来。

这个应该体现出来索引的作用了。查询上百万条的记录很慢了。

1.上面说的,建立有效的索引
2.如果数据量以后还会增加的话建立分表
3.表的结构涉及到字符比较长的独立出来新表中
4.查询使用存储过程来实现

phpmyadmin执行多了卡死(php.ini中设置set_time_limit(0);),可以试着用navicate for mysql

desc select * from A as a,B as b where a.haoma = b.haoma给表加上索引,就很快的,如果有where条件查询,可以加上全文索引。