ホーム > フラッグblog > BaserCMSでPostgreSQLを使う場合に貼っておいたほうがいいINDEX一覧(ブログ編)
Date 2011/11/03   

BaserCMSでPostgreSQLを使う場合に貼っておいたほうがいいINDEX一覧(ブログ編)

前回のBaserCMS勉強会で @itm_kiyo さんがLTで話してましたPostgresのチューニング。
BaserCSMでPostgresを使った場合、INDEXがあまり貼られていないので貼ったほうがいいというお話。
 
時間がなくてサラっと流されたんですが、
いいお話だったのでもうちょっと詳しくDBを見ながらやってみました。

※スロークエリの分析は重要です。一応ちゃんとスロークエリの分析を参考に統計取ってます。
ただその説明はめんどくさいので省きます。今回は統計+感どころのチューニングです。
ちゃんとやる場合は統計とってやってくださいね☆


DBを覗くといろいろなテーブルが出てきますが、今回はブログに注目。一番更新しますからね。
BaserCMS 1.6.14で使われているブログ関係はこれぐらいの様子。
 
 
 
public | bc_pg_blog_categories      | table | postgres
public | bc_pg_blog_comments        | table | postgres
public | bc_pg_blog_configs         | table | postgres
public | bc_pg_blog_contents        | table | postgres
public | bc_pg_blog_posts           | table | postgres
public | bc_pg_blog_posts_blog_tags | table | postgres
public | bc_pg_blog_tags            | table | postgres
 
 
 
インデックスは直訳すると「索引」と言われていますが、個人的には「潤滑油」ぐらいのイメージのほうがしっくりきます。
テーブルとテーブルの繋ぎこみ(JOIN)している部分や、検索(Where)に使われているところに チュッ と差し込んでやると駆動が良くなります(笑)
ただしどこでもかしこも油差し過ぎると、逆に良くないですよ。と。
 
 
で、ブログの記事を記録しているのは
bc_pg_blog_posts
のテーブルのようです。
ここにタグやらコメントやらが紐つくので重くなっている様子。
 
IDの部分は大体JOINに使われているし、状況によって増えそうなテーブルが多いのでここには全部INDEX貼っちゃいましょう。
おそらくnoあたりもsortに使ってそうなので貼っときます。
 
 
CREATE INDEX blog_category_id_idx ON bc_pg_blog_posts(blog_category_id) ;
CREATE INDEX blog_content_id_idx ON bc_pg_blog_posts(blog_content_id) ;
CREATE INDEX user_id_idx ON bc_pg_blog_posts(user_id) ;
CREATE INDEX bc_pg_blog_posts_no_idx ON bc_pg_blog_posts(no) ;
 
 
 
 
 
それからブログとタグをひもづけてるbc_pg_blog_posts_blog_tags 。
タグを使う場合こいつは臭い。この辺、INDEX貼ればかなり変わりそう。
 
CREATE INDEX blog_post_id_idx ON bc_pg_blog_posts_blog_tags(blog_post_id) ;
CREATE INDEX blog_tag_id ON bc_pg_blog_posts_blog_tags(blog_tag_id) ;
 
 
 
 
あとはコメントのテーブル。bc_pg_blog_comments 
もしサイトが炎上してコメント1000も2000も行った場合はここも負荷になるのでINDEX貼っときましょう。
 
CREATE INDEX blog_comments_content_id_idx ON bc_pg_blog_comments(blog_content_id) ;
CREATE INDEX blog_comments_post_id_idx ON bc_pg_blog_comments(blog_post_id) ;
CREATE INDEX blog_comments_no_idx ON bc_pg_blog_comments(no) ;
 
できました。
 
これでブログ関係はOKです。詳しくデータは取ってませんが(INDEX後のコストデータは)だいぶ早くなった気がする。
 
次は一般のページ関係に関わるチューニングをやりたいと思います。
 

この記事をシェアする

TOP

Flagsystem