弹簧启动查询
@Query(value="SELECT *
FROM products p
join product_generic_name pg on pg.id = p.product_generic_name_id
where (p.product_name like %?1%
and p.parent_product_id IS NULL
and p.is_active=true and
我有两张桌子如下所示:
阶
Id, Name
产品
Id, OrderId, ...
我想按特定的订单名称过滤所有的产品。我的T查询:
SELECT o.Id, o.Name, p.Id
FROM Order o
INNER JOIN Product p ON o.Id = p.OrderId
WHERE o.Name = "TEST"
我的products表可以有上千行,所以我相信这个SQL首先将所有订单与所有产品连接起来,然后让所有已连接的结果集应用WHERE子句来选择那些具有测试名称的订单。
如果SQL首先按名称"TEST“过滤Order表,然后只对这些订单进行连
我在PostgreSQL9.1中有类似的查询
SELECT id
FROM students
INNER JOIN exams ON /some condition
WHERE studentsid NOT IN (SUBQUERY);
当我只运行它在120 Is中执行的子查询时,当我使用子查询不附带条件地执行之前的查询时,它会执行12秒,但是当我添加子查询时,它运行半个小时就可以缓存子查询的某些变量结果(结果总是相同的ids数组)并在控制台/pgadmin中执行?我在语句中找到了它,但看起来它在postgres中不受支持。
假设我有两个表、产品和ProductCategories。两个表在CategoryId上都有关系。这是一个查询。
SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
创建执行计划时,表ProductCategories执行集群索引查找,这是期望。但是对于表产品,它执行集群索引扫描,这让我感到怀疑。为什么FK无助于提高查询性能