MySQLでいろいろ
試してみたいな、とか思ってたり。奥深いですが。
最近知ったのは、「MySQLでは、一つのクエリにおいて、一つのテーブルに対して、一つのインデクスしか使用されない」ってことです。だから、思った以上にインデクスの設計がシビア。
他にも、「探索キーはマルチカラムインデクスと先頭一致しないと有効にインデクスを参照しない」って、これ、コトバで説明するの難しいですね。マルチカラムインデクスが、以下の順序で作成されていたとすると。
(col1, col2, col3)
以下の探索ではインデクス参照されますが、
where col1=1
where col1=1 and col2=1
where col1=1 and col2=1 and col3=1
以下の探索(インデクスカラムの順序と、探索キー指定の順序が頭から一致していない)では全件走査になると。
where col2=1
where col2=1 and col1=2
where col1=1 and col3=1
他にも、いろいろと。ここの説明が分かりやすかったです。
MySQL:インデックスまとめメモ
あ、あとこちらも試してみたいなとか。
Senna 組み込み型全文検索エンジン
現状、日本語の全文検索って上手く動かないんですよね。以下のサイトで紹介されているような、ある種裏技を使えば、ってことらしいですけど。
mysqlで日本語全文検索するには?
MySQLについて 伍
MySQLで日本語全文検索を行うためには、まず、形態素解析やN-gramによって、文字列をワードごとに分割して、スペースで区切り、さらに、16進数文字に変換したりして、あたかも日本語ではないかのように装う必要があります。
ちなみに、Sennaの話は別として、上で書いたようなインデクス設計や、クエリの最適化に関しては、以下の本が丁寧に書いていました。
実践ハイパフォーマンスMySQL ジェレミ・D. ザウドニ、デレク・J. ベリング 他 (2004/10) オライリージャパン この商品の詳細を見る |