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