多表联合查询速度慢。如何解决

撸红薯 发布于 2013/04/24 23:30
阅读 4K+
收藏 4

比如这个问题如何解决。 如下这个sql

select c_id from t_mv_info where c_screen_year = 2013 and c_id in

(select c_mv_id from t_area_info where c_area_id = 2 and c_mv_id in

(select c_mv_id from t_mv_type_info where c_type_id = 2))


t_mv_info          大概50w的数据

t_area_info        100w 行数据

t_mv_type          100w 行数据

这个查询要好几分钟。 这种如何优化速度啊!

加载中
0
k
kukala

帮顶一下,同看解答!

0
信念永恒
信念永恒
那就不关联,将数据写入缓存中。
信念永恒
信念永恒
安装redis把这几个表数据导入进去,查和插都操作redis,写python系统定时执行,功能就是把缓存里面的值写处mysql,这样就可以做到0查询mysql了
撸红薯
撸红薯
数据量很大 组合很多 如何写缓存啊
0
肥添
肥添
SELECT c_id
FROM   t_mv_info
WHERE  c_screen_year = 2013
       AND c_id EXISTS (SELECT c_mv_id
                    FROM   t_area_info
                    WHERE  c_area_id = 2
                           AND c_mv_id EXISTS (SELECT c_mv_id
                                           FROM   t_mv_type_info
                                           WHERE  c_type_id = 2))
ALTER TABLE t_mv_info ADD PRIMARY KEY (c_id)
ALTER TABLE t_area_info ADD INDEX c_mv_id_index (c_mv_id)
ALTER TABLE t_mv_type_info_info ADD type_c_mv_id_index (c_mv_id)
这样不知道ok不~请指教
0
汪林
汪林
两个in,不慢才怪啊
0
x
xx-xx-xx

mysql、MsSQL还是 oracle?

0
宏哥
宏哥

引用来自“ichenshy”的答案

mysql、MsSQL还是 oracle?

闻一下标题的味道就知是MySQL
JollyRoger
JollyRoger
这都能闻出来?
0
独孤小败
独孤小败
in 要少用啊,效率慢呢,最好用关联查询
0
x
xx-xx-xx

引用来自“宏哥”的答案

引用来自“ichenshy”的答案

mysql、MsSQL还是 oracle?

闻一下标题的味道就知是MySQL
问味道像MsSQL,一般这种写法在MsSQL比较常见,在MySQL中一般都是left join、inner join之类的
x
xx-xx-xx
回复 @JollyRoge : 不知道是受哪本教材或手册的影响,貌似使用MsSQL的很多都是那种嵌套子查询的写法,即使这些人转到MySQL后仍然是那种写法,如果一开始接触的是MySQL,一般都是join。个人看的一种现象而已。
JollyRoger
JollyRoger
MSSQL也是可以用left join、inner join之类的,看个人习惯吧
0
findever
findever
几分钟?是没做好索引么。。
0
放倒
放倒

用索引视图(MSSQL)或者物化视图(ORACLE)把这个大表拼出来。

其他的...洗洗睡吧,明天还要加班。

返回顶部
顶部