问一下数据库性能问题 
现在我有两张表,表A是用户表, 
表B是照片表,一个用户有多张照片. 
表A现在的数据是18000多条.表B目前跟表A的数据差不多. 
而且表B数据,有可能是表A的2至8倍。 
因为一个用户最多可以上传8张照片. 
我试过以下方法.都是很慢.用原生态的SQL 都要5至8分钟.才会搜出来. 
不能用not in 
用过 left join 也很慢。 
not  exists  也是。 
请问有哪位高手对数据库有研究的提点一下. 
我现在要求就是,找出没有用户头像的数据. 
在表B中,有一个照片类型字段.picType  当他等于3的时候就是用户头像. 
如果不等3的就是没有头像的用户. 而且HQL 该如何才能用 join 这类的连接查询?我现在多表查询都是用 from 表A,表B,数据一大的时候,效率太低了.
我用过join 一用就报错.是不是要配置什么呢?有高手提示一下吗?

解决方案 »

  1.   

    何不修改一下表结构?A表加个flag字段。
      

  2.   

    LZ要是把这两张表关联起来了,默认查询的时候,两张表的东西自然都会查出来对于数据库,没什么再好设计的了,因为这种情况是经常出现的只有分页查询,批量查询一部分了对于B表里的东西,可以按A表查出B表的关联字段对于Hibernate可以用下抓取策略。开下查询缓存,缓存下B表索引,但一次性查那么多数据,就要考研机器性能了,所以还是建议批量为好
      

  3.   

    我已经是用分页查询了.而且一面是显示16条,用得是真分页.用户表member 照片表photo现在情况如下:
    用户表主键. m.id  照片表中有一个字段p.flagId 来存放用户表的主键(也有可能是别的表主键),所以又用一个字段picType来区分,如果这个类型为3时,就肯定是用户的头像.而p.flagId,就一定是用户ID.一.当用户注册时,他有可选择上传或不上传照片.当然上传一张照片(用户自定义头像照片)时,照片表就会加一条数据.且p.flagId,就一定是m.id 且picType就是3.这时我们就要关联查出,不存在于照片表的信息.因为这样子的用户,肯定是没有头像的.
    二.当用户上传了照片.但是他没有上传自定义头像的照片.他可以上传自己的生活照片.这时,p.flagId也还是用m.id但是picType就不会是3
    这时我们就要关联查出,存在于照片表,但是照片类型不等于3的用户.(这里要注意一点,如果用户他又上传了自定义头像并且也上传了个人生活照片的,这样的用户就要过滤.).用户最多上传8张照片.可想而知,数据量大时,真的太慢了.所以才请教各位,有什么好方式.最好是用hibernate实现,程序比较好维护.最后,如何让hibernate实现join 这样的联接查询,该如何配置.
      

  4.   

    hibernate.use_out_join ,LZ要找这个吗?如果使用hibernate设置了关联关系,首先应该考虑 lazy