我用的是postgres. 客户端一刷新,就要从服务器随机取5条数据。如果用
select field1, field2,field3 from table1 order by random() limit 5
这样就会频繁的随机读取数据库,生成的field1,field2,field3将会用文件流发送到客户端。如果table1数据量很大,每次随机取会造成性能下降。
有什么办法可以优化?比如把所有数据先取出来放到内存或者硬盘,然后每次客户端需求随机5条数据时候,从内存或者硬盘随机取5个文件。这样效率会好些吗?

解决方案 »

  1.   

    我现在建立了一个随机列,想用牺牲空间的方法来实现原来是order by random() , 它会给每个记录建立一个随机数据,然后按照这个新的临时随机列排序,然后再limit 5..
    我现在建立好了这个列randnum, 但是怎么让查询按照这个字段排序呢?
    我不想用select * from table1 order by randnum.  这样还是对整个表作排序耗费大量cpu.给这个字段建立索引会有所帮助吗?