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年计算机等级考试时间

  计算机等级考试动态

  计算机等级考试报名时间

  计算机等级考试时间

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

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

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

分享

热门关注

计算机二级考试时间多长

关于计算机二级

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

关于计算机二级

计算机二级考试时间分配

关于计算机二级

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

考试内容

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

计算机成绩

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

计算机二级基础知识点

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

计算机二级考试知识点

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

全国计算机二级

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

全国计算机等级考试

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

计算机等级考试