免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5128 | 回复: 17
打印 上一主题 下一主题

请教mysql查询时间十几秒的优化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-06 18:26 |只看该作者 |正序浏览
现在情况是这样
业务表有a,b两个表
a表中有一千多万数据
b表有接近三千万数据

为了简单我就写关键的字段

a表有如下字段
id int  主键
tid int  索引

b表中有如下字段
id int主键

select a.id,b.id from a,b where a.id=b.id and a.tid in(1,3,4);
mysql查询要十几秒

大家帮忙看看我这个该怎么优化啊 谢谢

论坛徽章:
0
18 [报告]
发表于 2010-03-17 00:10 |只看该作者
感谢各位了 帮忙看看啊

论坛徽章:
0
17 [报告]
发表于 2010-03-10 13:03 |只看该作者
感谢各位了 帮忙看看啊 帮忙分析一下该怎么优化这个查询执行才能变短啊

论坛徽章:
0
16 [报告]
发表于 2010-03-10 13:02 |只看该作者
期待各位高手帮忙优化一下sql查询 (在不分表和不分区的情况下)

论坛徽章:
0
15 [报告]
发表于 2010-03-10 00:17 |只看该作者
加个表

int id, int tid

这个id  是满足a.id=b.id,当这两者相等的情况下才插入这个表。

id 做主键 ...
james.liu 发表于 2010-03-09 17:18

典型的空间换时间?
然后a表直接和这个新表连接查询得结果

论坛徽章:
0
14 [报告]
发表于 2010-03-09 17:18 |只看该作者
加个表

int id, int tid

这个id  是满足a.id=b.id,当这两者相等的情况下才插入这个表。

id 做主键索引就够了把。

论坛徽章:
0
13 [报告]
发表于 2010-03-09 14:35 |只看该作者
各位大大们 帮个忙啊

论坛徽章:
0
12 [报告]
发表于 2010-03-09 09:29 |只看该作者
回复  mmxcq

select a.id,b.id from a,b where  a.id
taluyi 发表于 2010-03-08 17:22


mysql> select count(*) from p1,p1gl where  p1.id <1000000  and  p1.id=p1gl.pid a
nd p1gl.tid in(1,3,4);
+----------+
| count(*) |
+----------+
|   300044 |
+----------+
1 row in set (1.33 sec)

mysql> select  count(*) from p1,p1gl where   1000000 <p1.id <2000000  and  p1.id
=p1gl.pid and p1gl.tid in(1,3,4);
+----------+
| count(*) |
+----------+
|  3350340 |
+----------+
1 row in set (27.61 sec)

mysql> select  count(*) from p1,p1gl where   p1.id>1000000    and  p1.id=p1gl.pi
d and p1gl.tid in(1,3,4);
+----------+
| count(*) |
+----------+
|  3050295 |
+----------+
1 row in set (13.33 sec)

mysql>

查询分开了查 然后合并结果集 也差不多哦  好像总体时间还慢些

论坛徽章:
0
11 [报告]
发表于 2010-03-08 23:50 |只看该作者
回复  mmxcq

select a.id,b.id from a,b where  a.id
taluyi 发表于 2010-03-08 17:22

然后取这两个查询的合集?  明天回公司去做个测试啊 看看查询是否变快

论坛徽章:
0
10 [报告]
发表于 2010-03-08 17:22 |只看该作者
回复 11# mmxcq

select a.id,b.id from a,b where  a.id <1000000  and  a.id=b.id and a.tid in(1,3,4);
select a.id,b.id from a,b where   1000000 <a.id <2000000  and  a.id=b.id and a.tid in(1,3,4);
...  就是把一个查询分开了,呵呵  不过如果数据库的表在创建时就分表的话就更好了
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP