如何在 Percona MySQL 5.6 WHERE 条件中执行 OR 索引测试
在测试表的两列上创建索引。
mysql> 从测试中选择*;
+-----+--------+
|编号 |姓名 |
+----- -+--------+
| 10 | 10新 |
| 20 |约翰|
| 30|露西 |
| 40 | 40拉里 |
| 50 | 50 Lilly |
+------+--------+
集合中的 5 行(0.00 秒)
mysql> 显示测试中的键;
空集(0.01 秒)
mysql> 在 test(id) 上创建索引 idx_test_id;
查询正常,0 行受影响(0.34 秒)
记录:0 重复:0 警告: 0
mysql> 在 test(name) 上创建索引 idx_test_name;
查询正常,0 行受影响(0.72 秒)
记录:0 重复:0 警告:0
mysql> 显示测试中的键;
+--------+------------+------------------+-------------+-------------+------------+-------- - ------+----------+--------+------+------------+--- ------+----------------+
|表|非唯一 |键名 |索引中的序列 |列名 |整理 |基数 |子部分 |包装 |空|索引_类型 |评论 | Index_comment |
+--------+------------+---------------- --+-------- -------+-------------+------------+-----------+-- --------+--------+------+------------+-- -------+-- -------------+
|测试| 1 | idx_测试_id | 1 |编号 |一个 | 5 |空|空|是 | BTREE |公共服务提供商; 1 | idx_测试名称 | 1 |名称 |一个 | 5 |空|空|是 | BTREE | BTREE | ---+------------+ ---------------+----------------+ ----------+----- ------+-------------+------------ +--------+------+-- ----------+---------+------------ -----+
2 rows in set (0.02 sec)
要在 OR 条件中覆盖这两列,将使用这两个索引。
mysql> 解释在 select * from test where id=10;
+----+----------------+--- ----+------+- ------------+------------+-------- -+--------+---- --+--------+
|编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考|行 |额外 |
+----+-------------+--------+------+ --------- ------+-------------+---------+--------+-- ----+---- ---+
| 1 |简单|测试|参考| idx_测试_id | idx_测试_id | 5 |常量 | 1 | NULL |
+----+-- ----------+--------+-----+--------- ------+-------- ------+--------+--------+--------+---- ---+
集合中的 1 行(0.00 秒)
mysql> 解释 select * from test where name='Lucy';
+----+-- -----------+-- -----+------+----------------+-------- --------+----- ----+--------+-----+---------------- -------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+--------+------+--------- ------+----------------+-- -------+--------+--------+-- ------------------+
| 1 |简单|测试|参考| idx_tes名称 | idx_测试名称 | 18 | 18常量 | 1 |使用索引条件 |
+----+------------+-- -----+--------+-------- --------+----------------+----- ----+--------+-----+ -----------------------+
集合中的 1 行(0.00 秒)
mysql> 解释 select * from测试 id=10 或 name='Lucy';
+----+-------- -----+--------+-------- +------------------------+- -----+--------+---- --+------+-------------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+-------- +-----+------------ ---+------+-------- --+------+------+- ------------+
| 1 |简单 |测试|全部 | idx_test_id,idx_test_name |空|空|空| 5 |使用 where |
+----+-------------+---- ---+------+-------- -------------------+------+---- -----+-----+-------- +-------------+
集合中的 1 行(0.00 秒)
mysql> 解释 select * from test where id=20 or name='露西';
+----+-------------+---- ---+------+-------- -------------------+-------+---- -----+------+------+-------------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+--------+-----+---------- ----------------+------+---------+------+ ------+-- -----------+
| 1 |简单|测试|全部 | idx_test_id,idx_test_name |空|空|空| 5 |使用 where |< br/>+----+------------+--------+--------+-------- ------ -------------+------+---------+-----+-------- +----- --------+
集合中的 1 行(0.00 秒)
mysql> 解释 select * from test where id=50 or name=' neo';
+----+------------+--------+--------+-------- ------ -------------+------+---------+-----+-------- +----- --------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+------ -------+--------+-----+--------- ------------------ +-----+---------+------+-----+ -------------+
| 1 |简单|测试|全部 | idx_test_id,idx_test_name |空|空|空| 5 |使用 where |
+----+-------------+-- -----+------+------------------------ ---+------+-- -------+------+-----+------------- +
1 row in set (0.00 sec)
删除这两个索引,重建一个索引,该索引将用于OR条件。
mysql> drop index idx_test_id;
错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行“ ”附近使用的正确语法
mysql> drop index idx_test_id on test;
查询正常,0 行受影响(0.33 秒)
记录:0 重复:0 警告:0
mysql> drop index idx_test_name on test;
查询正常,0 行(0.02 秒)
记录:0 重复:0警告:0
mysql> 在受影响的测试(id)上创建索引 idx_test_id;
查询正常,0 行受影响(0.09 秒)
记录:0 重复:0 警告:0
mysql> 解释 select * from test where id= 50 or name='neo';
+----+-------------+ -------+------+--- ------------+-----+---------+-- ----+------+------ -------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+--------+-----+-------- - ------+------+---------+------+------+------------ - -+
| 1 |简单|测试|全部 | idx_测试_id |空|空|空| 5 |使用 where |
+----+---------- --+--------+-----+--------- ------+------+--------- +------+-----+------------ -+
集合中的 1 行(0.00 秒)
mysql > 解释 select * from test where name='neo';
+----+---- --------+--------+------+----------------+--------+-- -------+------+------+- ------------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-- ----------+--------+-----+--------- ------+------+ ---------+------+-----+------------ -+
| 1 |简单|测试|全部 |空|空|空 |空| 5 |使用 where |
+----+-------------+--------+------+- -------- --------+------+---------+------+-----+---- ------ ---+
s 中的 1 行et (0.00 秒)
mysql> 解释 select * from test where name='Lucy';
+- ---+------------- +--------+------+----------------+- -----+---------+- ------+------+-------------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+-------- +-----+------------ ------+------+----------+------+-- ----+------------ -+
| 1 |简单|测试|全部 |空|空|空|空| 5 |使用 where |
+ ----+------------+--------+--------+-------- -------+ ------+---------+------+-----+------------ --+
1 row in set (0.00 sec)
删除表中的索引并创建包含这两列的联合索引。该索引将用于 OR 条件。在MyS上发现QL中联合索引的应用规则与Oracle中不同。单个查询条件仅包含一列的 WHERE 条件。例如,如果创建联合索引的字段顺序是A和B,则对B的查询也会使用该索引e 联合指数。
mysql> 在测试上删除索引 idx_test_name;
错误 1091 (42000): 无法删除 'idx_test_name';检查列/键是否存在
mysql> drop index idx_test_id on test;
查询正常,0行受影响(0.09秒)
记录:0重复:0警告:0
< br/>mysql> 在 test(id,name) 上创建索引 idx_test_id_name;
查询正常,0 行受影响(0.21 秒)
记录:0 重复:0 警告:0
mysql> 显示测试中的键;
+---- ---+----------------+------------ ------+-------------- +------------+------------+--- ----------+--------- -+--------+--------+------------ ---+---------+--------- ------+
|表|非唯一 |键名 |索引中的序列 |列名 |整理 |基数 |子部分 |包装 |空|索引_类型 |评论 | Index_comment |
+------ +----------------+------------------+ --------------+-- -----------+------------+--------- ---+----------+--- -----+------+------------+----- ----+------------- -+
|测试| 1 | idx_test_id_name | idx_test_id_name |1 |编号 |一个 | 5 |空|空|是 | BTREE | BTREE 5 |空|空|是 | BTREE | |
+--------+------------+------------ ------+---- ----------+-------------+------------+-- -------------- +----------+--------+------+---------- -+---------+ ---------------+
集合中有 2 行(0.00 秒)
mysql> 解释 select * from test where name='Lucy';
+----+-------------+--------+-------+------------- ---+----------------+---------+--- ---+------+- ----------------------------------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+--------+----- --+-------- -------+--------------------+---------+-----+----- -------------------------+
| 1 |简单|测试|索引 |空| idx_test_id_name | idx_test_id_name | 23 | 23空| 5 |使用地点;使用索引 |
+ ----+------------+--------+--------+-------- ------ +--------------------+---------+------+-----+ ------ --------------------+
1row in set (0.00 sec)
mysql> 解释 select * from test where name ='neo';
+----+----------- --+--------+--------+----- ----------+---------------- ---+---------+-----+--- ---+------------------------ ----+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+-----+--------+--------- ------+----------------+----------+ ------+------ +--------------------------------------+
| 1 |简单|测试|索引 |空| idx_test_id_name | idx_test_id_name | 23 | 23空| 5 |使用地点;使用索引 |
+----+------------+-------- -+--------+-------- ------+------------------+----- ----+------+----- -+--------------------------------------+
集合中的 1 行(0.00 秒)
mysql > 解释 select * from test where id=10;
+----+------------ -+--------+--------+ ------------------+-------------- ----+---------+-- ------+------+-------------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+-------- +------+----------------+--------------------------------+---- ----- +--------+------+-------------+
| 1 |简单|测试|参考| idx_test_id_name | idx_test_id_name | idx_test_id_name | idx_test_id_name | 5 |常量 | 1 |使用索引 |
+----+------------+--------+--------+-------- ---- ------+--------------------+----------+--------+- ----- +-------------+
集合中的 1 行(0.00 秒)
mysql> 解释 select * from test where id= 10 或 name='露西';
+----+-------------+-------+--------+-- ----- ----------+----------+---------+-----+-- ---- +--------------------------------------+
|编号 |选择类型 |表|类型 |可能的键 |关键| key_len |参考|行 |额外 |
+----+-------------+-----+-----+--- ------- ------+------------------+---------+----- -+----- -+--------------------------------------+
| 1 |简单|测试|索引 | idx_test_id_name | idx_test_id_name | idx_test_id_name | idx_test_id_name | 23 | 23空| 5 |使用地点;使用索引 |
+----+------------+--------+--------+---- --- ----------+------------------+---------+-------- +- ---+--------------------------------------+
1 row in set (0.00 sec)
以上是如何在Percona MySQL 5.6的WHERE条件下进行OR的索引测试。小编相信有些知识点在我们日常工作中可能会看到或者用到。希望您能从本文中了解更多信息。更多详情请关注行业资讯频道。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在 Percona MySQL 5.6 WHERE 条件中执行 OR 索引测试