I am a little concerned about at least 2 of the queries.
In the GET NEWS query I see this...
PHP Code:
WHERE forumid IN ($vbindex[newsfid])
AND deletionlog.primaryid IS NULL
AND forumid NOT IN (".implode(',', $limitfids).")
now, if you are already doing and IN clause, there is no need to do a NOT IN clause. It's more overhead for absolutely nothing.
Now in the GET LATEST THREADS there is a similar issue..
PHP Code:
WHERE open = '1'
AND thread.open <> 10
AND thread.forumid NOT IN (".iif(is_numeric($vbindex['newsfid']), "$vbindex[newsfid],").implode(',', $limitfids).")
Here we see open=1 and open <> 10. You don't use both. You are already looking for 1, so <>10 will again be useless overhead.
For this NOT IN, I had more NOT IN id's than I would have IN id's, so I changed this to an IN statement and hardcoded my id's. I think only 5 instead of 30 or so I want to exclude. I think this could be made an option.
One last thing, I added indexes on dateline for post and thread and it made a significant increase in speed for my db with 100,000+ threads and over 1.5million posts.
Went from the vbIndex loading in 30s to about 3s with all these changes.
Your milage may vary, but I think it's worth a shot.