MySQL データベース - SQL に最適化されたインデックス

1. 準備 - 人物テーブルの作成

-- ----------------------------
-- 创建Person表
-- ----------------------------
DROP TABLE IF EXISTS person;
CREATE TABLE person  (
  PID int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  PNAME varchar(50)  NOT NULL COMMENT '姓名',
  PSEX varchar(10) NULL DEFAULT NULL COMMENT '性别',
	PAGE	int(11)  NOT NULL COMMENT '年龄',
  SAL decimal(7, 2) NULL DEFAULT NULL COMMENT '工资',
  PRIMARY KEY (PID)
) ENGINE = InnoDB AUTO_INCREMENT = 7001 CHARACTER SET = utf8mb4 COMMENT = '人员表';

2. インデックスを作成する

構文:
CREATE INDEX テーブル名 (列名) のインデックス名。

Person テーブルの pname のインデックスを作成します。

CREATE INDEX INDEX_PERSON_PNAME ON PERSON(PNAME);

SQL ステートメントがインデックスを使用しているかどうかを確認する

EXPLAIN select * from person where pname= 'Jack';

f31b21b4d57f4429afd81825ae7d3e20.png 

3. MySQL でテーブルの主キーを作成すると、デフォルトでインデックスも作成されます。

-- 下面的DQL语句使用了索引。
EXPLAIN
select * from person
where id =1;

4. ファジークエリのような pname はどこでインデックスを使用しますか?

-- 前后模糊中间精确不会使用索引
EXPLAIN
select  * from person where pname like '%e%';
-- 前面模糊后面精确也不会使用索引
EXPLAIN
select  * from person where pname like '%e';
-- 只有前面精确后面模糊才会使用索引,工作中数据量大的表模糊查询尽量不要使用 '%%',也不要使用'%a',他们都不支持索引
EXPLAIN
select  * from person where pname like 'e%';

5. 複合インデックスの作成方法 例: 年齢と性別の 2 つの列に対して複合インデックスを作成したいと考えています。

-- 为多个列创建复合索引
CREATE INDEX INDEX_PERSON_AGE_SEX ON PERSON(PAGE,PSEX);
-- 没有创建索执行下面DQL语句引耗时1.427秒,创建索引执行耗时1毫秒
SELECT * FROM PERSON WHERE PAGE =22 AND PSEX='男';
-- 创建的复合索引,但是只对第二个索引列单独进行where条件,不会使用索引
-- 如果创建复合索引,经常使用的列放在前面
EXPLAIN
SELECT * FROM PERSON WHERE  PSEX='男';

 

 

おすすめ

転載: blog.csdn.net/shengshanlaolin_/article/details/128461188