我现在要查询一个订单表,订单关联了客户,根据客户的所属人查询属于自己的订单,
from SalOrder where (customer in(select c from Customer as c where user.id = '1'))
我觉得这样查询效率比较低,在查询订单的时候还要查询客户表,想在订单表里加一个所属人外键,但那样在修改客户所属人时还要用触发器修改该客户下所有订单的所属人,比较麻烦,大家看看有没有什么好的解决办法
from SalOrder where (customer in(select c from Customer as c where user.id = '1'))
我觉得这样查询效率比较低,在查询订单的时候还要查询客户表,想在订单表里加一个所属人外键,但那样在修改客户所属人时还要用触发器修改该客户下所有订单的所属人,比较麻烦,大家看看有没有什么好的解决办法
另外在表上加个索引,也可以提高效率
select a.* from SalOrder a, Customer b where a.customer = b.c and b.user.id = '1'
改成 from SalOrder a where EXISTS (select from Customer b where b.user.id = '1' and b.id = a.customer) 不过没试过hql里面能不能用exists。楼主可以试下。还有尽量where条件后面有索引的条件放到前面。如果hql不支持exists,楼主可以用查询器执行原生sql来解决这个问题。
不明白LZ所指的c是什么意思。如果写sql语句比较麻烦的话,可以考虑修改一下配置文件,级联查询,前提是你的项目是用了hibernate再就是考虑是使用即时加载还是延迟加载的问题。
select a.* from SalOrder a, Customer b where a.customer = b.c and b.user.id = '1'
数据库搜索数据顺序:
1,从SalOrder表取出一条数据。
2,根据1中取出数据的customer字段从Customer表查询符合条件的记录。