你说得对,RAND()
是一个性能杀手,几乎每次都涉及到一个完整的表扫描,如果你在WordPress中有大量帖子,那将是一场噩梦。
因此,与其显示随机帖子,不如显示看似随机的帖子,但实际上并非如此。下面是一个简单的示例:
您可以查询20篇文章的总文章数,偏移量为1到(total-20)之间的随机数,用PHP获得将结果缓存一小时或更长时间使用PHP随机显示来自缓存的20篇文章中的一篇这意味着您每小时只需查询一次数据库。
查询将减少随机性,速度更快,因为您没有RAND()
但使用OFFSET
相反具有WP_Query
这可以方便地与max_num_pages
, posts_per_page
和paged
参数。
最后,由于您获得了20篇帖子,对于在不到一个小时内刷新页面不超过20次的访问者来说,步骤4中的结果似乎非常随机。
还值得注意的是,如果您想绕过页面缓存,可以将所有20篇帖子传递给JavaScript,并使用JS随机选择一篇。