アルバムのビューを計算したい場合は、アルバム テーブルにアルバム ビュー フィールドを追加し、写真を参照するときに同時にアルバム ビューを更新できます。
2. スロークエリをオンにする
Mysql のスロークエリはデフォルトでオフになっており、10 秒を超える SQL ステートメントはデフォルトで記録されます。
1. 遅いクエリのレコード時間を確認します:
show variables like ‘long_query_time’;
2. 次の関数を使用してテストします: set long_query_time=2;
3.
1. 主キーインデックスの特徴:
(1) テーブルには最大 1 つの主キーインデックスが存在します (2) 1 つの主キーインデックスは複数の列を指すことができます
(3)主キーインデックスのカラムは重複値やnullは不可
(4) 主キーインデックスの効率が高い。
2. 一意のインデックスの特徴:
(1) テーブル内に複数の一意のインデックスが存在する可能性があります
(2) 一意のインデックスは複数の列を指すことができます
(3) 一意の場合インデックスでは、not null が指定されていない場合、列が空になる可能性があり、同時に複数の null が存在する可能性があります。
(4) 一意のインデックスの方が効率的です。
3. 通常のインデックス:
通常のインデックスの使用は主にクエリ効率を向上させるためです
4. フルテキスト インデックス
MySQL 独自のフルテキスト インデックス mysql5.5 は中国語をサポートしていません。ただし、必要なテーブルのストレージ エンジンは myisam です。中国語をサポートしたい場合は、(1) aphinx 中国語版 coreseek を使用する (全文インデックスを置き換える)
(2) プラグイン mysqlcft の 2 つのオプションがあります。
インデックス追加時の主な問題:
(1) クエリ条件として頻繁に使用されるフィールドにはインデックスを作成する必要があります。一意性の低いフィールドは、たとえ頻繁にクエリ条件として使用されるとしても、個別のインデックス作成には適していませんクエリ条件、
Update 非常に頻繁なフィールドはインデックスの作成には適していません (2) WHERE 句に出現しないフィールドにはインデックスを作成しないでください。クエリの速度は向上しますが、 には影響があります。追加と削除の効率化。また、インデックス ファイルがスペースを占有します。
4. サブテーブル、パーティション
垂直サブテーブル (コンテンツメインテーブル + 追加テーブル):
コンテンツメインテーブル: さまざまなデータの一部の公開情報を格納します。 , たとえば、データの名前や追加時刻など、
は複数の追加テーブルを使用でき、追加テーブルにはデータの何らかの固有の情報が保存されます。
主な理由: コンテンツ マスター テーブル内のデータへのアクセスがより頻繁になります。
特徴: 異なるテーブル構造
水平テーブル分割:
テーブルデータを異なるテーブルに保存
。
特徴: テーブル構造は同じです
パーティション:
は、ディスクの異なる領域にテーブルを格納しますが、それでも 1 つのテーブルです。
基本概念:
(1)範囲 – このモードでは、データをさまざまな範囲に分割できます。たとえば、テーブルを年ごとに複数のパーティションに分割できます。
(2)List (事前定義リスト) – このモードでは、システムが事前定義リストの値によってデータを分割できます。
(3)ハッシュ (ハッシュ) – このモードでは、テーブルの 1 つ以上の列のハッシュ キーを計算でき、最後にこのハッシュ コードのさまざまな値に対応するデータ領域を分割します。たとえば、テーブルの主キーを分割するテーブルを作成できます。
(4)Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
分区表的限制:
(1)只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列。
(2)最大分区数目不能超过1024。
(3)如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。
(4)按日期进行分区很非常适合,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多。
五、并发处理的锁机制
锁机制:在执行时,只有一个用户获得锁,其他用户处于阻塞状态,需要等待解锁。
mysql 的锁有以下几种形式:
表级锁:开销小,加锁快,发生锁冲突的概率最高,并发度最低。myisam引擎属于这种类型。
行级锁:开销大,加锁慢,发生锁冲突的概率最低,并发度也最高。innodb属于这种类型。
表锁的演示:
1.对myisam表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其他进程的操作。
2.表添加读锁后,其他进程对该表只能查询操作,修改时会被阻塞。
3.当前进程,能够执行查询操作,不能执行修改操作。不能对没有锁定的表进行操作。
4.锁表的语法:
lock table 表名 read|write
5.也可以锁定多个表
6.对myisam表的写操作(加写锁),会阻塞其他进程对锁定表的任何操作,不能读写,
7.表加写锁后,则只有当前进程对锁定的表,可以执行任何操作。其他进程的操作会被阻塞。
行锁的演示:
1.innodb存储引擎是通过给索引上的索引项加锁来实现的,这就意味着:只有通过索引条件检索数据,innodb才会使用行级锁,否则,innodb使用表锁。
2.开启行锁后,当前进程在针对某条记录执行操作时,其他进程不能操作和当前进程相同id的记录。
php里面有文件锁,在实际的项目中多数使用文件锁,因为表锁,会阻塞,当对一些表添加写锁后,其他进程就不能操作了。这样会阻塞整个网站,会拖慢网站的速度。
相关推荐: