如何优化搜索多对多表的查询



我有3个表:

table1:{id, uid}
table2:{id, uid}
table1_table2:{table1_id, table2_id}

我需要执行以下查询:

SELECT 1 FROM table1_table2
LEFT JOIN table1 ON table1.id = table1_table2.table1_id
LEFT JOIN table2 ON table2.id = table1_table2.table2_id
WHERE table1.uid = ? and table2.uid = ?

我在UUID列上有唯一的索引,所以我希望搜索速度很快。当我有一个几乎为空的数据库时,select需要0毫秒,当表1中有50000条记录,表2中有100条记录,而表1_table2中有110000条记录时,select花费10毫秒,这是一个很大的时间,因为我必须进行400000次查询。我可以选择O(1(吗?

现在我使用hibernate(spring数据(和postgres。

您有唯一的索引,但是否也使用ANALYZE更新了统计信息?

UID列使用什么类型?您从Java向它提供什么类型?

当您从Hibernate/Java和Postgres控制台运行它时,有什么区别吗?

使用";EXPLAIN";,从Java和Postgres控制台获取执行计划,并观察任何差异。请参阅如何将Postgres的查询计划信息获取到JDBC 中

最新更新