wrsその3

mysqlを画期的に高速化する奥義(またか)。 たとえば、テーブルの行数が60万あるとする。 どうしても重い。 そこで、よく使う部分、たとえば人気記事のトップ1000とかだけ抜き出して別テーブルにする。 行数が1000しかないからアクセスがすごく速い。 テーブルを抜き出すにはcreate table selectを使えば良い。

create table top_ranking select * from orig_table where evaluation > 50;

など。 まあ、理屈としてはHDDに対するメモリキャッシュみたいなもんで、 ありきたりではあるが、 効果はてきめん。 wrsで(速)と書いているところがそう。 トップページ(デフォルトのページ)はこれを使ってランダム表示させるようにした。 逆に(遅)というのは全数検索を繰り返しやってるもので、遅い。

wikipediaでも、ほとんど編集されてないページとか、 あまり編集されてないページとか、 redirectだけのページなどがたくさんある。 頻繁に編集されているページは60万件のうち1万件くらい。 ここらを抜き出しておいて人気記事として表示すればすごく速い。

ほかにも、複数テーブルを使って、idから参照して別テーブルから実体を読み出すとか、 そんなかったるいことをやっていては遅くなる。 idとかではなくそのものずばりを単一テーブルに格納して一度に取り出すのが一番速い。