如何在 Percona MySQL 5.6 WHERE 条件中执行 OR 索引测试

分类:编程技术 时间:2024-02-20 15:42 浏览:0 评论:0
0
本文与大家分享如何在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的索引测试。小编相信有些知识点在我们日常工作中可能会看到或者用到。希望您能从本文中了解更多信息。更多详情请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在 Percona MySQL 5.6 WHERE 条件中执行 OR 索引测试

用户评论