我现在有一个查询语句: select uuid, feature from faces where uuid in (uuid1, uuid2,....)
其中, faces 表中的数据量千万级别,而查询条件 in 后边的 uuid 集合大约几千条,是通过其他方式获取到的 uuid 集合,直接在 sql 语句中使用
现在我如果直接执行这条语句,性能很差,个人 PC 执行需要花费 30 多秒,实在是太慢了。
请教各位有没有什么优化方案。
我现在有一个查询语句: select uuid, feature from faces where uuid in (uuid1, uuid2,....)
其中, faces 表中的数据量千万级别,而查询条件 in 后边的 uuid 集合大约几千条,是通过其他方式获取到的 uuid 集合,直接在 sql 语句中使用
现在我如果直接执行这条语句,性能很差,个人 PC 执行需要花费 30 多秒,实在是太慢了。
请教各位有没有什么优化方案。
|
F281M6Dh8DXpD1g2Jun 17, 2016 via iPhone
1
in 改成 join
|
|
haoqiangimJun 17, 2016
2
给 uuid 加个 index 呀。
|
|
ovearJun 17, 2016
3
|
|
JiShuTuiJun 17, 2016
4
根据 3 楼的链接,用 temporary table 也就是临时表
|
|
zrp1994Jun 17, 2016
5
同样遇到过这种情况,数据量快到一亿。从数据库结构来说,分表比较靠谱。
|
|
realpgJun 17, 2016
6
1000 万条记录 执行 5000 次 select * from table where uuid= 也不用 30 秒吧
你确定 uuid 有索引?以及你的磁盘 IO 适配千万行的数据量 |
|
jetyangJun 17, 2016
7
先确定 uuid 有没有索引, in 的效率很高的,几千个 uuid 有点多,但不至于这么慢
|
|
alouhaJun 17, 2016
8
平时也遇到这样的问题,基本上都是先从缓存里取,找不到再查数据库……
|
|
Weixiao0725Jun 17, 2016
9
select A.uuid, A.feature from faces as A, (select uuid from table where condition) as B where A.uuid = B.uuid
|