2018年全国计算机二级MySQL章节知识点:Mysql索引的三个原则

  三,实例

  1,单表数据太少,索引反而会影响速度

  mysql> call i_test(10,'test_t'); //向test_t表插入10条件

  Query OK, 1 row affected (0.02 sec)

  mysql> select num from test_t where num!=0;

  mysql> explain select num from test_t where num!=0\G;

  *************************** 1. row ***************************

  id: 1

  select_type: SIMPLE

  table: test_t

  type: ALL

  possible_keys: NULL

  key: NULL

  key_len: NULL

  ref: NULL

  rows: 10

  Extra: Using where

  1 row in set (0.00 sec)

  ERROR:

  No query specified

  mysql> create index num_2 on test_t (num);

  Query OK, 10 rows affected (0.19 sec)

  Records: 10 Duplicates: 0 Warnings: 0

  mysql> select num from test_t where num!=0;

  mysql> explain select num from test_t where num!=0\G;

  *************************** 1. row ***************************

  id: 1

  select_type: SIMPLE

  table: test_t

  type: index

  possible_keys: num_2

  key: num_2

  key_len: 4

  ref: NULL

  rows: 10

  Extra: Using where; Using index

  1 row in set (0.00 sec)

  ERROR:

  No query specified

  mysql> show profiles;

  +----------+------------+---------------------------------------------+

  | Query_ID | Duration | Query |

  +----------+------------+---------------------------------------------+

  | 1 | 0.00286325 | call i_test(10,'test_t') | //插入十条数据

  | 2 | 0.00026350 | select num from test_t where num!=0 |

  | 3 | 0.00022250 | explain select num from test_t where num!=0 |

  | 4 | 0.18385400 | create index num_2 on test_t (num) | //创建索引

  | 5 | 0.00127525 | select num from test_t where num!=0 | //使用索引后,差不多是没有使用索引的0.2倍

  | 6 | 0.00024375 | explain select num from test_t where num!=0 |

  +----------+------------+---------------------------------------------+

  6 rows in set (0.00 sec)

  解释:

  id:表示sql执行的顺序

  select_type:SIMPLE,PRIMARY,UNION,DEPENDENT UNION,UNION RESULT,SUBQUERY,DEPENDENT SUBQUERY,DERIVED不同的查询语句会有不同的select_type

  table:表示查找的表名

  type:表示使用索引类型,或者有无使用索引.效率从高到低const、eq_reg、ref、range、index和ALL,其实这个根你sql的写法有直接关系,例如:能用主键就用主键,where后面的条件加上索引,如果是唯一加上唯一索引等

  possible_keys:可能存在的索引

  key:使用索引

  key_len:使用索引的长度

  ref:使用哪个列或常数与key一起从表中选择行,一般在多表联合查询时会有。

  rows:查找出的行数

  Extra:额外说明

  前段时间写过一篇博文mysqldistinct和group by谁更好,里面有朋友留言,说测试结果根我当时做的测试结果不一样,当时我打比方解释了一下,今天有时间,以例子的形势,更直观的表达出索引的工作原理。

  2,where后的条件,order by ,group by 等这样过滤时,后面的字段最好加上索引。根据实际情况,选择PRIMARY KEY、UNIQUE、INDEX等索引,但是不是越多越好,要适度。

  3,联合查询,子查询等多表操作时关连字段要加索引

  mysql> call i_test(10,'test_test'); //向test_test表插入10条数据

  Query OK, 1 row affected (0.02 sec)

  mysql> explain select a.num as num1,b.num as num2 from test_t as a left join tes

  t_test as b on a.num=b.num\G;

  *************************** 1. row ***************************

  id: 1

  select_type: SIMPLE

  table: a

  type: index

  possible_keys: NULL

  key: num_2

  key_len: 4

  ref: NULL

  rows: 10

  Extra: Using index

  *************************** 2. row ***************************

  id: 1

  select_type: SIMPLE

  table: b

  type: ref

  possible_keys: num_1

  key: num_1

  key_len: 4

  ref: bak_test.a.num //bak_test是数据库名,a.num是test_t的一个字段

  rows: 1080

  Extra: Using index

  2 rows in set (0.01 sec)

  ERROR:

  No query specified

  数据量特别大的时候,最好不要用联合查询,即使你做了索引。

  推荐阅读:

  2018年全国计算机二级MySQL章节知识点:Mysql的优化方法

  2018年计算机二级考试大纲汇总

  2018年计算机二级考试WEB考点汇总

  2018年计算机二级考试Access习题答案汇总

  2018年计算机二级考试MSOffice习题答案汇总

  留学群计算机等级考试 栏目推荐:

  2018年计算机等级考试计划

  2018年计算机等级考试时间

  计算机等级考试动态

  计算机等级考试报名时间

  计算机等级考试时间

  计算机等级考试准考证打印时间

  计算机等级考试成绩查询时间

  计算机等级考试试题及答案

分享

热门关注

计算机二级考试时间多长

关于计算机二级

计算机二级考试时间一年几次呢

关于计算机二级

计算机二级考试时间分配

关于计算机二级

计算机二级考试内容考些什么

考试内容

计算机二级什么时候出成绩呢

计算机成绩

计算机二级基础知识点归纳

计算机二级基础知识点

计算机二级考试知识点有哪些

计算机二级考试知识点

全国计算机二级科目怎么选

全国计算机二级

全国计算机等级考试二级证书的含金量

全国计算机等级考试

全国计算机等级考试二级难吗

计算机等级考试