ホームページ >データベース >mysql チュートリアル >数百万のデータを含む mysql テスト環境の概要

数百万のデータを含む mysql テスト環境の概要

藏色散人
藏色散人転載
2019-04-17 17:19:453815ブラウズ

Mysql は非常に優れた無料データベースとして広く利用されており、通常私たちが開発するプロジェクトのデータが 100 万を超えることはほとんどありません。最近、私は数百万のデータの場合の mysql の最適化に関する詳細な研究に多くの時間を費やしました。たくさんの問題に遭遇して解決したので、それを皆さんと共有したいと思います。貴重なご意見大歓迎です!

関連する推奨事項: 「MySQL チュートリアル

テスト環境

データの総数は 300 万で、約1G のディスク容量

データ構造

表1 news [ 文章表 引擎 myisam 字符集 utf-8 ]
-----------------------------------------------------
idint11主键自动增加
cateint11索引
titlevarchar200标题(便于基础搜索做了索引)
contenttext文章正文
dateint11文章发布时间(时间戳形式)
表2 cate [ 文章分类表 引擎 myisam 字符集 utf-8 ]
-----------------------------------------------------
cate_idint11主键自动增加
cate_namevarchar200文章标题

クエリ総数

myIsam 引擎下
select count(*) as total from news
//耗时 0.001秒 极快 
//带上条件
select count(*) as total from news where cate = 1
耗时 0.046秒 可以接受的速度
innodb 引擎下
select count(*) as total from news
//耗时 0.7秒 很慢
select count(*) as total from news where cate = 1
耗时 0.7秒 很慢

理由2 つのエンジンのクエリ速度は大きく異なりますか?

InnoDB はテーブル内の特定の行数を保存しません。つまり、select count(*) from table を実行するとき、InnoDB はテーブル全体をスキャンして、そこにある行数を計算する必要があります。は。

MyISAM は保存された行数を読み取るだけです。

count(*) ステートメントに where 条件が含まれている場合、2 つのテーブルの操作は若干異なることに注意してください。InnoDB タイプのテーブルは count(*) または count (主キー) に加えて wherecol 条件を使用します。 。 Col列は、テーブルの主キー以外の一意性制約インデックスを持つ列です。この方法では、クエリ速度が非常に速くなります。これは、テーブル全体のスキャンを回避するためです。

概要

mysql は count(*) を使用して 300 万個のデータ (myisam エンジン) のデータの総数をクエリし、条件を含みます (インデックスは正しく設定されています) )、実行時間は正常です。頻繁に読み取られるデータの場合は、myIsam エンジンを使用することをお勧めします。

以上が数百万のデータを含む mysql テスト環境の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はhcoder.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。