<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>シータネットワークス &#187; スタッフコラム</title>
	<atom:link href="http://www.theta.ne.jp/archives/category/%e3%82%b9%e3%82%bf%e3%83%83%e3%83%95%e3%82%b3%e3%83%a9%e3%83%a0/feed" rel="self" type="application/rss+xml" />
	<link>http://www.theta.ne.jp</link>
	<description>ホームページ制作、PHP・AJAXによる開発、Linuxサーバーの構築など</description>
	<lastBuildDate>Thu, 08 Apr 2010 09:41:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>クロスドメインでAJAX</title>
		<link>http://www.theta.ne.jp/archives/134</link>
		<comments>http://www.theta.ne.jp/archives/134#comments</comments>
		<pubDate>Fri, 06 Nov 2009 06:38:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[スタッフコラム]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[CrossOver]]></category>

		<guid isPermaLink="false">http://www.theta.ne.jp/?p=134</guid>
		<description><![CDATA[みなさん、こんにちは。
現在、このサイトのトップページには「Headline」というコンテンツが表示されています。
今回は、この「Headline」についての技術的なご紹介をさせていただきます。

クロスドメイン制約
こ [...]]]></description>
			<content:encoded><![CDATA[<p>みなさん、こんにちは。</p>
<p>現在、このサイトのトップページには「Headline」というコンテンツが表示されています。</p>
<p>今回は、この「Headline」についての技術的なご紹介をさせていただきます。</p>
<p><a href="http://www.theta.ne.jp/#headline"><img class="alignnone size-medium wp-image-136" title="クロスドメインでAJAX" src="http://www.theta.ne.jp/wp-content/uploads/2009/11/headline-300x116.gif" alt="クロスドメインでAJAX" width="300" height="116" /></a></p>
<h3>クロスドメイン制約</h3>
<p>このHeadlineでは、弊社が運営する「<a href="http://www.theta.ne.jp/">デジタルカタログ制作のデジパン</a>」のRSSフィードを取得して順番に表示しているのですが、実はAJAXアプリケーションにはクロスドメイン制約というセキュリティ上の制限が設けられています。</p>
<p>そのため違うドメインのサイトから取得したXMLを使用したAJAXアプリケーションは動作しません。</p>
<p>そこで、多くの場合は、PHPやPerl/CGIなどでプログラムを作成して、一度自社サーバー内にXMLをダウンロードしてから、自社ドメイン内のXMLとして処理を行います。<br />
（JSONPと呼ばれる方法などもありますが、これらは相手側の対応が必要です。）</p>
<p>しかし、このサイトではあえてそれらの方法を使用していません。</p>
<h3>CrossOverを使用したクロスドメイン</h3>
<p>弊社ではCrossOverという小さなライブラリを開発して公開しています。</p>
<ul>
<li><a href="http://firegoby.theta.ne.jp/labo/crossover/">サンプルページ</a></li>
<li><a href="http://firegoby.theta.ne.jp/archives/224">配布ページ</a></li>
</ul>
<p>このライブラリは、前述のようなクロスドメイン制約を回避するためのライブラリで、ライブラリ内には小さなswfファイル及びJavaScriptが同梱されています。</p>
<p>実は皆さんがアニメーションで目にすることが多いFlashには、crossdomain.xmlで許可された場合のみ、違うドメインからのXMLアクセスを許可するという機能があります。</p>
<p>そしてCrossOverは、この仕組みを利用してFlashによって取得したXMLをJavaScriptに渡すことでクロスドメインによるAJAXを可能にしています。</p>
<p>このCrossOverはオープンソースで公開してから約半年になりますが、おかげさまで1000件以上のダウンロードが行われ、非常に多くのサイトで利用いただいています。</p>
<p>弊社では技術レベルの向上のために、このCrossOverのようなオープンソースへの貢献を非常に重要なものと位置づけています。</p>
<p>今後とも弊社をよろしくお願いいたします。</p>]]></content:encoded>
			<wfw:commentRss>http://www.theta.ne.jp/archives/134/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>実践！お金を払わなくても出来るSEO対策（２）</title>
		<link>http://www.theta.ne.jp/archives/60</link>
		<comments>http://www.theta.ne.jp/archives/60#comments</comments>
		<pubDate>Wed, 18 Apr 2007 11:03:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[スタッフコラム]]></category>

		<guid isPermaLink="false">http://www.theta.ne.jp/blog/archives/60/</guid>
		<description><![CDATA[前回に引き続き、SEO対策について今回は具体的な作業をご説明します。
以下の方法はホームページ制作会社が行う最も基本的な手法です。
タイトルをチェックしましょう。
Googleなどの検索エンジンは、ページ内のどこよりもタ [...]]]></description>
			<content:encoded><![CDATA[<p>前回に引き続き、SEO対策について今回は具体的な作業をご説明します。<br />
以下の方法はホームページ制作会社が行う最も基本的な手法です。<span id="more-60"></span></p>
<h3>タイトルをチェックしましょう。</h3>
<p>Googleなどの検索エンジンは、ページ内のどこよりもタイトルを非常に重視する傾向にあります。<br />
ですから、タイトルには分かりやすく簡潔なものを指定しましょう。</p>
<p>タイトルには、あまり多くの言葉を入れすぎるとSEO上では逆に不利になります。<br />
少ない単語数の中で、上位に表示させたいキーワードを使用するのがベターです。<br />
また、キーワードはなるべく前の方に入れるとさらにいいようです。</p>
<h3>表現を統一しましょう。</h3>
<p>例えば、同じ意味を表す言葉が複数サイト内で使用されている場合は、なるべくその単語は同じ表現で統一するようにしましょう。</p>
<p>たとえば。。。</p>
<ul>
<li>ホームページ制作（または製作）</li>
<li>WEB制作（または製作）</li>
</ul>
<p>などは、全て同じ意味です。</p>
<p>この場合は、ホームページ制作に統一することで、そのキーワードの露出が増えて、検索結果の順位では有利に働きます。</p>
<p>「ホームページを作りました」のような表現も「ホームページを制作しました」のように表現を変えることで、やはり有利になります。</p>
<p>SEOに関係のないキーワードでも、表現の統一は非常に重要です。<br />
Googleは、サイト内で出てくる全ての文章を「わかち書き」という技術で単語毎に分割して、各キーワードの露出頻度を検索結果の順位に反映しています。</p>
<p>したがって、表現を統一することで全体のキーワード数が減少しますので、SEO対策を行いたいキーワードの比率が上がり、検索順位に有利に働きます。</p>
<h3>すべてのページに貴社の連絡先をいれましょう。</h3>
<p>多くの中小企業は営業エリアが、一部の地域に限られます。<br />
その場合は、貴社住所を全てのページにいれることで、「地域名＋キーワード」というような検索で上位に表示されるようになります。</p>
<h3>リンク先をチェックしましょう。</h3>
<p>Googleが検索順位の決定にリンク先がどれぐらいあるかを重視しているのはとても有名です。</p>
<p>しかし、いくらリンクしてくれていても、そのリンク先がGoogleに登録されていなければ、全く意味がありません。</p>
<p>そんな時は、そのサイトのオーナーに変わって、検索エンジンに登録されるように各検索エンジンに推薦してあげましょう。</p>
<h3>ブログを有効活用しましょう。</h3>
<p>Googleが検索エンジンの順位の決定に、リンク先がどれぐらいあるかを重視しているのは、前述の通りです。</p>
<p>実はその中でも、ブログサイトからのリンクをGoogleは非常に重視しています。</p>
<p>ですから、ぜひスタッフブログや社長ブログなどを積極的に開設して、そちらでも自社のPRを行うことをおすすめします。</p>
<h3>最後に</h3>
<p>基本的なことばかりですが、弊社の経験では実はこれらの対策だけでも非常にいい結果が出ることが多いのが事実です。<br />
どれも費用をかけること無く対策可能なことばかりですので、ぜひお試しください。</p>]]></content:encoded>
			<wfw:commentRss>http://www.theta.ne.jp/archives/60/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>実践！お金を払わなくても出来るSEO対策（１）</title>
		<link>http://www.theta.ne.jp/archives/59</link>
		<comments>http://www.theta.ne.jp/archives/59#comments</comments>
		<pubDate>Tue, 10 Apr 2007 11:58:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[スタッフコラム]]></category>

		<guid isPermaLink="false">http://www.theta.ne.jp/blog/archives/59/</guid>
		<description><![CDATA[SEO対策については、Googleで検索してみるとわかる通り、様々なホームページ制作会社がサービスを行っています。
弊社にもいろいろなお客様から問い合わせをいただくのですが、長期間にわたって費用を頂かなくても、ご自身でや [...]]]></description>
			<content:encoded><![CDATA[<p>SEO対策については、Googleで検索してみるとわかる通り、様々なホームページ制作会社がサービスを行っています。<span id="more-59"></span></p>
<p>弊社にもいろいろなお客様から問い合わせをいただくのですが、長期間にわたって費用を頂かなくても、ご自身でやって頂いた方がより良い結果を招くことも多いようです。</p>
<p>今回は、企業のウェブマスターが、すぐにできるSEO対策の基本的な手法を<strong>専門用語無し</strong>でご説明します。</p>
<h3>なによりもキーワードの選定を！</h3>
<p>いくらSEO対策を行って上位に表示されても、キーワードを間違えたら肝心の受注も問い合わせも増えません。</p>
<p><strong>SEOではキーワードの選定が最も重要な作業です。</strong></p>
<p>弊社の場合、キーワードの選定には、「<a href="http://www.overture.co.jp/ja_JP/arp/srch.php">スポンサードサーチ</a>」を使用しています。</p>
<p>この「<a href="http://www.overture.co.jp/ja_JP/arp/srch.php">スポンサードサーチ</a>」は、オーバーチュアという広告サービスを利用する際に、どのキーワードで広告を出すかを検討するために使用するためのツールです。</p>
<p>しかし、実際に広告を出さなくても利用可能で、このツールを使うことで以下のことを推測可能です。</p>
<ul>
<li>Yahoo japan等の検索エンジンでのそのキーワードの検索頻度</li>
<li>Yahoo japan等の検索エンジンでのそのキーワードと同時に検索される第二キーワード</li>
</ul>
<h4>たとえば、美容院の予約を増やしたい場合。。。</h4>
<p>美容院を指すキーワードとして、「美容院」「美容室」「ヘアサロン」の３つが上げられます。</p>
<p>３つのキーワード全てに対してSEOを行うことは困難なので、どのキーワードを使用するべきか？ということを検討する必要があります。<br />
その際に、上述のツールはとても便利です。</p>
<p>作業の流れとしては、「オーバーチュアで入札したいキーワードの月間検索数を調べる」入力ボックス内に「美容院」「美容室」「ヘアサロン」の３つのキーワードをそれぞれ一つずつ入力します。</p>
<p>そして、その両方を穴があくほどよく見て比較すると、以下のことが推測できます。</p>
<blockquote><h4>「美容院」「美容室」「ヘアサロン」での比較結果</h4>
<p>「美容院」「美容室」ともに８万回検索されているが「ヘアサロン」は２万回弱しか検索されていないので、<strong>ヘアサロンというキーワードにSEO対策を施すことはあまり意味が無い</strong>。</p>
<p>「美容院」と「美容室」の第２キーワードを比較した場合に、「美容室」の第二キーワードは業界の人らしきキーワードが目立つ。<br />
実際に「美容院＋求人」「美容室＋求人」で比較すると５倍ほど美容室のほうが多い。</p>
<p>このことから、<strong>一般の人は「美容院」、業界の人は「美容室」と検索することが多い</strong>ことが予想される。</p>
<p>その美容院が東京にある場合、「美容院＋東京」「美容室＋東京」の両方で検索頻度を調べると、「美容室」検索頻度が４倍くらい多い。<br />
<strong>なぜか東京都周辺だけは美容室というキーワードで検索されるほうが多い</strong>ことが予想される。</p></blockquote>
<p>以上のことから、</p>
<p>１．東京の美容院なら、「美容室」<br />
２．他の地域なら「美容院」<br />
３．できれば求人も増やしたい場合は、「美容室」</p>
<p>という結果を導き出すことができます。</p>
<h3>キーワードが決まったら実際に検索してみましょう</h3>
<p>対象キーワードの候補が決まったら、実際にそのキーワードで検索してみましょう。<br />
もし、検索結果が１００万件以内ならチャンスです。</p>
<p>今後ご紹介する対策を行えば、弊社の経験では５０位以内はほぼ確実に。<br />
２０位以内でもかなりの確率で表示させることが可能です。</p>
<p>もしライバルが１００万件以上なら、第二キーワードに貴社サービスエリア等を加えてみましょう。<br />
その結果が１００万件以内であるなら、やはりチャンスであるといえます。</p>
<h3>キーワードの選定まとめ</h3>
<p>キーワードの選定方法はご理解いただけましたか？<br />
弊社では、さらに突っ込んだ方法でキーワードの選定を行っています。<br />
<a href="http://www.theta.ne.jp/q/">興味のある方はぜひお問合せ下さい。</a></p>
<p>いよいよ、実際のSEO対策を貴社サイトに施すわけですが、今回はとりあえずここまで。<br />
続きは、来週公開致します。</p>]]></content:encoded>
			<wfw:commentRss>http://www.theta.ne.jp/archives/59/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQLのSQLチューニング</title>
		<link>http://www.theta.ne.jp/archives/58</link>
		<comments>http://www.theta.ne.jp/archives/58#comments</comments>
		<pubDate>Wed, 04 Apr 2007 11:07:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[スタッフコラム]]></category>

		<guid isPermaLink="false">http://www.theta.ne.jp/blog/archives/58/</guid>
		<description><![CDATA[非常に高機能なオープンソースのデータベース「PostgreSQL」を使用したシステムでは、高機能であるが故に誤ったクエリーを多用され無駄にパフォーマンスを低下させるケースが多いようです。
このコラムでは、そんな誤ったSQ [...]]]></description>
			<content:encoded><![CDATA[<p>非常に高機能なオープンソースのデータベース「PostgreSQL」を使用したシステムでは、高機能であるが故に誤ったクエリーを多用され無駄にパフォーマンスを低下させるケースが多いようです。</p>
<p>このコラムでは、そんな誤ったSQL文とその改善方法をご説明します。<span id="more-58"></span></p>
<h3>チューニングのポイント</h3>
<ul>
<li>explain analyzeを使用してSQLのベンチマークを行う。</li>
<li>インデックスの有効活用。</li>
<li>max()、count()などの関数に注意。</li>
<li>limitの活用。</li>
<li>その他のポイント</li>
</ul>
<h3>explain analyzeを使用してSQLのベンチマークを行う</h3>
<p>弊社の経験では、パフォーマンスに問題が生じるのは、運用開始後しばらくたってからのことです。</p>
<p>多くの場合、開発時点ではテスト用データの件数が実運用時の件数よりも圧倒的に少なく、十分にSQL文の検証が行われないまま実運用に入ってしまい、パフォーマンスに問題が生じるというパターンが多いのが実情です。</p>
<p>しかしながら、<strong>データ件数の少ない状態でも開発時点でSQL文にベンチマークを行えば、パフォーマンスに関する問題を事前に察知することが可能</strong>です。</p>
<h4>ベンチマークの方法</h4>
<p>ベンチマークは、psqlコマンドでデータベースに接続した後、実際に実行したいSQL文の前にexplain analyzeをつけて実行してやることで可能です。</p>
<p><code>EXPLAIN ANALYZE select ac_id from tbl_access_log order by ac_id desc limit 1 offset 0;</code></p>
<p>上記の例では、select以降（小文字の部分）が実際のSQL文です。</p>
<p>結果は、以下の通りとなります。</p>
<p><code>Limit  (cost=0.00..0.52 rows=1 width=4) (actual time=0.490..0.502 rows=1 loops=1)<br />
   -&gt;  Index Scan Backward using tbl_access_log_pkey on tbl_access_log  (cost=0.00..15603.39 rows=30083 width=4) (actual time=0.448..0.448 rows=1 loops=1)<br />
 Total runtime: 0.675 ms<br />
(3 rows)</code></p>
<p>出力内容の全てをご説明することはここでは避けますが、Total runtime: 0.675 msというのが、クエリーを実行する際にかかる時間、Index Scan&#8230;という記述が「インデックスが使用されましたよ」という意味です。</p>
<p>このIndex Scanの記述の当たりに、Seq Scanという記述がある場合は、インデックスが使われておらず全てのデータを検索したということであり、実運用に入った際に<strong>パフォーマンスが低下する原因</strong>となります。</p>
<h3>インデックスの有効活用</h3>
<p>パフォーマンスの問題が発生するシステムの多くは、インデックスが十分に活用されていません。<br />
せっかく設定してあるのに、SQL文が適切でないためにインデックス自体が使用されていない場合や、インデックスの設定が不十分であるケースが多く見受けられます。</p>
<p>インデックスが適切に設定されたデータベースは、目次から目的のページを探すのと同じようにダイレクトに目的のデータを探すことができます。</p>
<p><strong>一方で、インデックスが適切に設定されていないシステムは、索引の無い辞書から知りたい単語を探すのと同じで、目的のデータであるかどうかを確認するために全てのデータを検索対象とします。</strong></p>
<p>初心者プログラマの多くは、SQL文中のWHERE句に指定するフィールドにのみインデックスを設定しますが、これでは不十分です。</p>
<p>実際には、PostgreSQLは、Order BYに指定する列などに対してもインデックスを使用してくれます。</p>
<h4>SQL文例</h4>
<p><code>EXPLAIN ANALYZE select * from tbl_access_log order by ac_os;</code></p>
<h4>インデックスを使っていない場合</h4>
<p><code>Sort  (cost=76542.51..76618.37 rows=30345 width=2018) (actual time=3610.709..4261.375 rows=30345 loops=1)<br />
   Sort Key: ac_os<br />
   -&gt;  Seq Scan on tbl_access_log  (cost=0.00..1413.45 rows=30345 width=2018) (actual time=0.229..819.466 rows=30345 loops=1)<br />
 <strong>Total runtime: 5538.514 ms</strong></code></p>
<h4>インデックスを使った場合</h4>
<p><code>Index Scan using tbl_access_log_ac_os on tbl_access_log  (cost=0.00..15781.13 rows=30345 width=2018) (actual time=0.771..736.737 rows=30345 loops=1)<br />
 <strong>Total runtime: 1262.557 ms</strong></code></p>
<p>上記の結果からクエリーに要する時間が1/4に減ったことがわかって頂けるとおもいます。</p>
<p>ちなみに、この例で使用したSQLでは、＊（アスタリスク）を使用していますが、アスタリスクを使用せず、必要なフィールドのみを指定してやれば、飛躍的なパフォーマンス向上を得られます。</p>
<h3>max()、count()などの関数に注意</h3>
<p>今回の例で使用しているテーブルは、某地方公共団体向けのCMS内のアクセスログの保存用のテーブルです。<br />
このテーブルには現時点で３万件のデータが保存されていますが、これは実運用下では数日で到達するデータ数です。</p>
<p>アクセスログのようなシステムでは、総アクセス数などのように、しばしばデータの件数が必要となります。</p>
<p>じつは、このSQL文にも多くのプログラマが陥る罠があります。</p>
<h4>count()やmax（）は使うべからず</h4>
<p><code>select count(*) from tbl_access_log;</code></p>
<p>上記のSQL文は、専門書等で普通に解説されているクエリーですが、これは多くの場合間違いです。</p>
<p>ベンチマークの結果を見てみましょう。<br />
<code>Aggregate  (cost=1489.32..1489.32 rows=1 width=0) (actual time=1171.802..1171.815 rows=1 loops=1)<br />
   -&gt;  Seq Scan on tbl_access_log  (cost=0.00..1413.45 rows=30345 width=0) (actual time=0.277..624.437 rows=30345 loops=1)<br />
 <strong>Total runtime: 1172.176 ms</strong></code></p>
<p>count関数は、全てのデータを単純に見に行きますので<strong>、インデックスは一切使われません</strong>。<br />
したがって、このままでは、データが増えるに従ってSQLの実行時間も長くなります。</p>
<p>この場合は、このテーブルに主キーフィールドとしてオートナンバーの列を追加してやり、その最大値を求めれば、パフォーマンスが向上します。</p>
<p>しかし、ここにも罠があります。</p>
<p><code>select max(ac_id) from tbl_access_log;</code></p>
<p>実は、PostgreSQLはmax()を使用した場合にも、すべてのデータを見にいってしまいます。</p>
<p><code>Aggregate  (cost=1489.32..1489.32 rows=1 width=4) (actual time=1188.998..1189.015 rows=1 loops=1)<br />
   -&gt;  Seq Scan on tbl_access_log  (cost=0.00..1413.45 rows=30345 width=4) (actual time=0.599..632.781 rows=30345 loops=1)<br />
 <strong>Total runtime: 1189.337 ms</strong></code></p>
<p>正しいSQL文は以下の通りです。</p>
<p><code>select ac_id from tbl_access_log  order by ac_id desc limit 1 offset 0;</code></p>
<p>上記の例では、単純に最大値をとるという意味ではなく、ac_idを逆順にソートしてその１行目だけをとるという方法で、総アクセス数を取得しています。</p>
<p>その結果は。。。<br />
<code>Limit  (cost=0.00..0.52 rows=1 width=4) (actual time=0.140..0.153 rows=1 loops=1)<br />
   -&gt;  Index Scan Backward using tbl_access_log_pkey on tbl_access_log  (cost=0.00..15710.13 rows=30345 width=4) (actual time=0.110..0.110 rows=1 loops=1)<br />
 <strong>Total runtime: 0.287 ms</strong></code></p>
<p><strong>SQLの実行時間が1/6000に減った</strong>ことがお分かりいただけましたか？</p>
<p>このように、PostgreSQLでは、一見便利そうに見える関数が、実はパフォーマンスに非常に大きな悪影響を与えることが多いことがお分かりいただけたと思います。</p>
<h3>limitの活用</h3>
<p>SQL文のパフォーマンスのポイントは、いかに対象とするデータを減らすかです。<br />
そういう意味で、インデックスを活用すると、目次から直接ページを開くようなイメージでデータを取り出すことができますので、とても高速に処理を行うことができます。</p>
<p>そしてもうひとつ、簡単に大きな結果を得られるのがlimitです。</p>
<p>先ほどの例で使用したSQLを再び。<br />
<code>select ac_id from tbl_access_log  order by ac_id desc limit 1 offset 0;</code></p>
<p>上記のSQLにもlimitが使用されています。<br />
しかしながら、単純に最大値をとるだけなら、limit 1 offset 0の部分は無くても同じ結果が得られます。</p>
<p>ところが、このlimit 1 offset 0を消してみると、結果の値は同じでもパフォーマンスには大きな開きが出ます。</p>
<p><code>EXPLAIN ANALYZE select ac_id from tbl_access_log  order by ac_id desc;</code></p>
<p>実行結果<br />
<code>Sort  (cost=3672.51..3748.37 rows=30345 width=4) (actual time=1762.159..2307.664 rows=30345 loops=1)<br />
   Sort Key: ac_id<br />
   -&gt;  Seq Scan on tbl_access_log  (cost=0.00..1413.45 rows=30345 width=4) (actual time=2.222..789.455 rows=30345 loops=1)<br />
 <strong>Total runtime: 2868.611 ms</strong></code></p>
<p>なんと、インデックスが使用されなくなり、<strong>SQLの実行時間が１万倍</strong>にはねあがりました。</p>
<p>SQLのパフォーマンス向上のツボは、いかに取得するデータを必要最小限に留めるかにつきます。<br />
WEBアプリケーションでは、１ページあたりに表示するデータの行数には必ず限りがありますので、忘れずにlimitを使用するように心がけましょう。</p>
<h3>その他のポイント</h3>
<p>上記以外にも書籍等で普通に紹介されている記述が、パフォーマンス上大きな悪影響を及ぼす事例があります。</p>
<ul>
<li>＊（アスタリスク）を使用している。<br />
＊は使わずに必要な列を指定した方が、確実にパフォーマンス向上につながります。</li>
<li>ORを使用している。<br />
ORを使用すると複合インデックスが使用されませんので、代わりにexists等を使うよう工夫することで劇的な改善が可能です。（PostgreSQL8.xでは改善されています。）</li>
<li>前後方一致検索を行っている。<br />
可能な限り避けた方がいいのですが、難しいことも多いでしょう。<br />
NamazuとPostgreSQLを連携させることも可能なので、予算に余裕があれば挑戦するといいかもしれません。</li>
<li>in()の中でのサブクエリーの使用<br />
これは、PostgreSQL7.xの仕様ですが、極端にパフォーマンスが低下します。<br />
PostgreSQL8.xでは改善されています。</li>
<li>日付の評価に＜や＞を使っている。<br />
この場合もインデックスが使用されません。期間などの指定にはbetweenを使用した方が遥かに高速です。</li>
</ul>
<p>以上、PostgreSQLの、SQLのチューニングによるパフォーマンス改善についてご説明しました。</p>
<p>上記であげた事例は、どれも数百〜数千倍単位でパフォーマンスが向上します。<br />
ぜひ、お試しください。</p>
<p>なお、弊社では、既存のシステムのSQLチューニングのご注文も承っておりますので、ご興味があればご相談ください。</p>]]></content:encoded>
			<wfw:commentRss>http://www.theta.ne.jp/archives/58/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
