2

私は非常に単純なテーブルを持っています

CREATE TABLE IF NOT EXISTS `largecache` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tooltip` varchar(255) NOT NULL,
  `name` varchar(100) NOT NULL,
  `attributes` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tooltip` (`tooltip`)
) ENGINE=InnoDB

ほぼ完全に読み取りに使用される約 800 万のエントリがあります。できるだけ早くデータにアクセスしていることを確認しようとしています。現在 InnoDB を使用していますが、MyISAM に切り替える価値はありますか? 私の唯一の懸念は、読み取りのパフォーマンスです。また、DB の読み取りがアプリケーションの唯一のボトルネックであるため、速度を上げるために使用できる他の推奨事項もあります。

MySQL クライアントのバージョンを使用しています: 5.1.47

ありがとう。

[編集: 詳細] 私は php を使用しており、ツールチップ フィールドの正確な一致に基づいてクエリを実行しています。1 ギガの RAM を備えた共有 VPS でホストされています。mysql を微調整してみますが、mysql の微調整はかなり複雑な問題であることはわかっています。

クエリの例:

select * from largecache where `tooltip` = "Cm8IuIyq9QMSBwgEFS0iGWAd30SUNR2EHJ0nHYYCY-odxZ6okR0pEnPgHWzQbvIiCwgBFXZCAwAYCCAiMAk4_gNAAEgPUBBg_gNqJQoMCAAQvKHZ5oCAgIA6EhUIrcC1xggSBwgEFUn1i18wCTgAQAEY2ojJgQxQAlgA"

APC はインストールされていますが、memcached はインストールされていません

4

3 に答える 3

6

あなたが行う正確なクエリがあるとよいでしょう。しかし、あなたがここに投稿した内容に基づいて、

全文検索 (myISAM を読む) を行う予定はありますか? innodb は行レベルのロックを行うため、見た目だけでテーブル レベルのロックを行う myISAM とは対照的に、innodb は要件に適しています。innodbエンジンを使用して次のことを試してください-

  1. フィールドにインデックスを配置しtooltipます。
  2. innodb config からトランザクション管理を無効にしてみてください。これは読み取りよりも書き込み用ですが。
  3. innodb のキャッシュ サイズを増やしてみてください。これらの DB エンジンはすべてメモリの吸盤です。より多くのメモリをそれらに投入するのと同じくらい簡単で、突然正常に動作します。
  4. 最後に、memcachedに言及せずにこの投稿を終わらせることはできません。これは分散キャッシュ管理モジュールであり、mysql と見事に統合されています。これにより、読み取り操作が大幅に向上します。

必要に応じてリンクを提供します。

完全を期すためにこれを確認してください-MySIAMでInnoDBを使用する理由

于 2012-09-25T03:06:54.860 に答える
1

5.1x のデフォルトの innodb では、すべてが同じであり、限られた詳細のみに基づいて適切に調整すると、myisam から少しパフォーマンスが向上する可能性があります。

私の提案は、5.5 と innodb に移行することです。

実際には、どのようにアクセスしているかを理解するために、いくつかのクエリを確認する必要があります。count(*) がたくさんありますか?

また、何百万もの行を扱っている場合、1G の RAM は少しきついかもしれません。これが唯一のテーブルではないと仮定します。これは、選択したテーブルの種類に関係なく、おそらく最大の問題です。

于 2012-09-25T03:08:35.320 に答える
0

MyISAM側にあるようです。「高速化に使用できるその他の推奨事項」に応じて、全文検索を実装できます。

于 2013-12-14T03:12:35.050 に答える