MySQL Casual Talks Vol.4 でのライトニングトークに利用した資料です。 MySQL-5.6.4より「InnoDB FTS」としてInnoDBで全文検索機能が加わりました。 この全文検索機能を利用し、日本語の全文検索エンジンとしての可能性を探ります。 ブログ記事はこちらです。 http://y-ken.hatenablog.com/entry/mysql-casual-talks-vol4-innodb-ftsRead less
この投稿は 10年半 前に公開されました。いまではもう無効になった内容を含んでいるかもしれないことをご了承ください。 生活に終われ、疲弊しきった不肖高橋です。海風薫る千葉の田舎町から大都会東京のコンクリートジャングルへと一人ゲルマン民族大移動を毎日繰り返した結果、加齢臭が強くなってきました。 昔は総武線でビール飲んでいるオジサンを見るたびに汚いものを見るような視線を投げていたのですが、いまその視線がブーメランのように私を射抜いていきます。 さて、「電車でビール飲んでる」と無意味な嘘をついたところで、おもむろに全文検索について。 以前WordPressで大規模データを扱う場合のTipsという記事でも触れたのですが、WordPressの検索はLIKE検索なので、記事が数千件を超えたあたりから少しずつ遅くなってきます。今回はその解決策として日本語全文検索をやってみます。 ぱくたそより アプローチ
CakePHPはよく触っていたものの、MySQLについてあまり知らなかったんですが、大規模なデータベースを扱ってみようと思い立ちいろいろ試行錯誤しています。 で、ついさっき感動したのが、40万件のレコードを扱ってるテーブルに簡単なSELECT分を投げて返ってくる時間がなんと5秒もかかっていて、なんじゃこりゃ?って首をかしげてたんですが、INDEXひとつで劇的に早くなったこと。 40万件が大規模かそうでないかはこの際おいておいて、INDEXのつけ方次第でこんなにも速度に変化があるのかと涙が出そうになった。 最初の激遅いテーブルは簡単に書くとこんな具合。 CREATE TABLE IF NOT EXISTS `shops` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `status
今回は、MySQLの高速化のメモ - @luke_silvia.diaryの方法に従ってクエリの高速化をした際に、MySQLのインデックスについて分かったことを書いておきます。 高速化対象のクエリ 今回高速化したいクエリは、以下のようなもの。 SELECT users.*, students.school, workers.school FROM users LEFT JOIN students ON users.id = students.user_id LEFT JOIN workers ON users.id = workers.user_id WHERE (users.status= 1 AND ((kind = 0 AND students.school = 'test') OR (kind = 1 AND workers.school = 'test'))) ORDER BY
mysqlを利用していて、indexをちゃんと張っているのにパフォーマンスが出ない。 explain でも type = ref / key = INDEX 等が表示されているのにすごくクエリーが遅かったりする。 思い切って index を消したら逆にパフォーマンスが改善した! why? データ件数が数万件を越えたあたりからパフォーマンスが劇的に下がった。 と、悩んでいたりしませんか? そんな悩みのひとつの解決策になってくれるかもしれません。 テストは vmplayer 上の debian etch で行います。 ホスト環境 intel Q6600 メモリ2Gの WindowsXPです。 クエリーをキャッシュされないように、クエリキャッシュを 0 にします。 /etc/mysql/my.cnf query_cache_size = 0 #no cahce debug swapで遅くなると困
仕事でMySQLのパフォーマンスチューニングをしていて、インデックスについて分かっていないことが多かったので調べたことをメモ。基本的なところから学習しなおした。 MySQLのインデックスは、カラムが特定の値をもつレコードの迅速な検索に使用される。インデックスを使用すれば、数百とか数億ものレコードが入っているテーブルから、一組のレコードを迅速に見つけて取り出すことが可能になる。 しかし、インデックスは速度を改善することもあるが、挿入の邪魔になって遅くなることもある。 インデックスを適切に使うために、まずはインデックスの基本概念をおさえる必要がある。 インデックスの概念 インデックスとは インデックスの仕組みを理解するには、まずMySQLがどのようにクエリに応答するかを知る必要がある。 例えば、 SELECT * FROM phone_book WHERE last_name = 'Hoge'
tl;dr: MySQL 5.5.14以降だとinnodb_large_prefixオプションで3072バイトまでインデックス張れる MySQL(InnoDB)では、ひとつのカラムのキープレフィックスの最大値が767バイトという制限があるので、ついうっかりして Index column size too large. The maximum column size is 767 bytes. とか Specified key was too long; max key length is 767 bytes といったエラーを見たことある人は多いのではないかと思います。 よくあるケースだと、varchar(256)以上のutf8なカラムにインデックスを張ろうとするとこのエラーとご対面できます。 CREATE TABLE t (c varchar(256), index (c)); ERROR
あなたが作成したページがGoogleなどの検索エンジンになぜインデックスされないのか、なぜランキングされないのか、ペナルティを課せられていないか、重複コンテンツの問題はないかを確認できる方法を紹介します。 10-Minute Missing Page Audit [ad#ad-2] 下記は各ポイントを意訳したものです。 各見出しの左は時間の目安です。 [0:00-0:30]インデックスの確認(ドメイン) サイトがGoogleにインデックスされているか確認します。フォームに「site:」コマンドを使用して、検索してください。 コマンドを使用する時はルートのドメイン名(site:example.com)を入力してください。 [0:30-1:00]インデックスの確認(ページ) 次に、ページがインデックスされているか確認します。前述の結果、Googleがそのサイトの存在を知っていると想定し、問題の
Bing Web マスター ツールにログインまたはサインアップして、あなたのサイトの検索パフォーマンスを向上しましょう。無料のレポートやツール、リソースにアクセスできます。
Linux-DB システム構築/運用入門の8章「インデックスのチューニング(前編)」を読んだので、インデックスの基本について実際に手を動かしながら勉強してみようと思います。 内容としては、クエリを実行する際に、「インデックスだけにアクセスした場合」と、「データにもアクセスする場合」のI/O 回数の違いが、パフォーマンスにどれだけ影響を与えるか調べてみるというものです。 環境 MySQL Ver 14.7 Distrib 4.1.22, for pc-linux-gnu (i686) using readline 4.3 ストレージエンジン MyISAM 今回は、インデックスだけにアクセスした場合と、データにもアクセスする場合のパフォーマンスの違いについて調べたいので、インデックスの構造が「キーの値, データの位置」となっているMyISAM の方が調査環境に向いていると判断しました。 テスト
MySQL は複合インデックス (つまり、複数のカラムに対するインデックス) を作成できます。 インデックスは最大 16 カラムで構成できます。 特定のデータ型では、カラムのプリフィクスにインデックスを設定できます (セクション8.3.5「カラムインデックス」を参照してください)。 MySQL では、インデックスで、すべてのカラムをテストするクエリーまたは最初のカラム、最初の 2 つのカラム、最初の 3 つのカラムというようにテストするクエリーにマルチカラムインデックスを使用できます。 インデックス定義の正しい順序でカラムを指定する場合、単一の複合インデックスにより、同じテーブルへの複数の種類のクエリーを高速化できます。 マルチカラムインデックスは、インデックス設定されたカラムの値を連結して作成された値を格納する行である、ソート済みの配列とみなすことができます。 複合インデックスの代わりに
2009年10月28日09:33 MySQL MySQLでインデックスを使って高速化するならCovering Indexが使えそう Linux-DB システム構築/運用入門 (DB Magazine SELECTION) 著者:松信 嘉範 販売元:翔泳社 発売日:2009-09-17 おすすめ度: クチコミを見る 最近、この本を読んでいます。非常に面白いし、参考になります〜。中でもインデックスについての記事が特に興味深かったので簡単にまとめてみます。 前提 ・インデックスは検索性能には効果があるが、更新性能は落ちてしまう ・MyISAM と InnoDB ではインデックスの構造が違う ・インデックスは B+Tree インデックスと呼ばれ、ルート、ブランチ、リーフの階層構造になっている ・インデックスはソートされた状態で作成されている まずは MyISAM と InnoDB でのインデックス
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く