mysql查看索引相关知识
-
mysql索引查询,最全说明mysql查询索引状态的方法:通过“SHOW INDEX”语句,语法格式“SHOW INDEX FROM [ FROM ]”;通过该语句可以查看索引的名称、是否是唯一索引、字段在索引中的位置,定义索引的列字段名等等。 索引创建完成后,可以利用 SQL 语句查看已经存在的索引。在 MySQL 中,可以使用 SHOW INDEX 语句查看表中创建的索引。 查看索引的语法格式如下:SHOW INDEX FROM [ FROM ]语法说明如下::指定需要查看索引的数据表名。:指定需要查看索引的数据表所在的数据库,可省略。比如,SHOW INDEX FROM student FROM test; 语句表示查看 test 数据库中 student 数据表的索引。示例SQL 语句和运行结果如下所示。mysql> SHOW INDEX FROM tb_stu_info2\G*************************** 1. row ***************************T
-
MySQL查看、创建和删除索引的方法本文实例讲述了MySQL查看、创建和删除索引的方法。分享给大家供大家参考。具体如下:1.索引作用在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢。如果对每个表进行索引,就能极大地加速查询进程。利用索引的查询处理如下。(1)从表t1中选择第一行,查看此行所包含的数据。(2)使用表t2上的索引,直接定位t2中与t1的
-
mysql 索引及索引创建原则正文回到顶部是什么 索引用于快速的查询某些特殊列的某些行。如果没有索引, MySQL 必须从第一行开始,然后通过搜索整个表来查询有关的行。表越大,查询的成本越大。如果表有了索引的话,那么 MySQL 可以很快的确定数据的位置,而不用查询整个表格。这比顺序的读取每一行要快的多。索引就像我们查字典时的目录一样,我们通过查询字典的目录,可以定位到某一行数据。 大多数的 MySQL 的索引(主键索引,唯一索引,普通索引,全文索引)都是 B-trees 结构。例外的情况有:在空间数据类型使用 R-trees 结构。存储引擎为 MEMORY 的数据库,也可以支持哈希索引。InnoDB 存储引擎的全文索引使用反向列表结构。回到顶部使用场景 MySQL 会使用到索引的场景如下: 1.根据一个条件快速的匹配到对应的行。 2.缩小查询影响行数。如果一个查询字段有多个索引,MySQL 通常选择使用影响行数最小的索引(选择性最高的索引)。索引的选择性的计算 select count(distinct
-
MySQL索引优化看这篇文章就够了!阅读本文大概需要 5 分钟。来源:cnblogs.com/songwenjie/p/9410009.html本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开(本文图片可点开放大)。一、MySQL索引基础首先,我们将从索引基础开始介绍一下什么是索引,分析索引的几种类型,并探讨一下如何创建索引以及索引设计的基本原则。此部分用于测试索引创建的user表的结构如下:1. 什么是索引?“索引(在MySQL中也叫“键key”)是存储引擎快速找到记录的一种数据结构。”——《高性能MySQL》我们需要知道索引其实是一种数据结构,其功能是帮助我们快速匹配查找到需要的数据行,是数据库性能优化最常用的工具之一。其作用相当于超市里的导购员、书本里的目录。2. 索引类型可以使用SHOW INDEX FROM table_name;查看索引详情:主键索引 PRIMARY KEY:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。注
mysql查看索引相关课程
-
MySQL提升课程 全面讲解MySQL架构设计 如何获得MySQL最优性能?如何建立MySQL高可用集群?如何搭建稳定高效的MySQL环境?国内顶级电商公司数据库专家带你成为一名优秀的DBA。
讲师:sqlercn 中级 4050人正在学习
mysql查看索引相关教程
- 4. 覆盖索引 如果一个索引包含所有需要查询的字段,称之为覆盖索引。由于覆盖索引无须回表,通过扫描索引即可拿到所有的值,它能极大地提高查询效率:索引条目一般比数据行小的多,只通过扫描索引即可满足查询需求,MySQL 可以极大地减少数据的访问量。表 customer 有一个多列索引 (first_name,last_name),以下查询只需要访问 first_name 和last_name,这时就可以通过这个索引来实现覆盖索引。mysql> explain select last_name, first_name from customer\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: indexpossible_keys: NULL key: idx1_customer key_len: 186 ref: NULL rows: 1 filtered: 100.00 Extra: Using index1 row in set, 1 warning (0.00 sec)当查询为覆盖索引查询时,在 explain 的 extra 列可以看到 Using index。
- 1.索引概念 索引在 MySQL 中也叫“键(Key)”,是存储引擎用于快速查找记录的一种数据结构,这也是索引的基本功能。MySQL 索引的工作原理,类似一本书的目录,如果要在一本书中找到特定的知识点,先通过目录找到对应的页码。在 MySQL 中,存储引擎用类似的方法使用索引,先在索引找到对应值,再根据索引记录找到对应的数据行。简单总结,索引就是为了提高数据查询的效率,跟一本书的目录一样。以下查询假设字段 c2 上建有索引,则存储引擎将通过索引找到 c2 等于 测试01 的行。也就是说,存储引擎先在索引按值进行查找,再返回所有包含该值的数据行。mysql> select * from t1 where c2='测试01'\G*************************** 1. row ***************************c1: 1c2: 测试011 row in set (0.00 sec)从执行计划的角度,也可以看出索引 idx_c2 被使用:mysql> create table t1( -> c1 int not null auto_increment, -> c2 varchar(10) default null, -> primary key(c1) -> ) engine = innodb;Query OK, 0 rows affected (0.05 sec)mysql> insert into t1() values(1,'测试01');Query OK, 1 row affected (0.00 sec)mysql> create index idx_c2 on t1(c2);Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> explain select * from t1 where c2='测试01'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 partitions: NULL type: refpossible_keys: idx_c2 key: idx_c2 key_len: 33 ref: const rows: 1 filtered: 100.00 Extra: Using index1 row in set, 1 warning (0.00 sec)常见的索引类型主要有 B-Tree 索引、哈希索引、空间数据索引(R-Tree)、全文索引,在后续小节将详细介绍。InnoDB 和 MyISAM 存储引擎可以创建 B-Tree 索引,单列或多列都可以创建索引;Memory 存储引擎可以创建哈希索引,同时也支持 B-Tree 索引;从 MySQL5.7 开始,InnoDB 和 MyISAM 存储引擎都可以支持空间类型索引;InnoDB 和 MyISAM 存储可以支持全文索引(FULLTEXT),该索引可以用于全文搜索,仅限于CHAR、VARCHAR、TEXT 列。
- MySQL 索引详细解读 索引是数据库中用来提高性能的常用工具。本节主要介绍 MySQL 索引的概念,及其优点。
- 5. 使用索引实现排序 MySQL 可以通过排序操作,或者按照索引顺序扫描来生成有序的结果。如果 explain 的 type 列的值为index,说明该查询使用了索引扫描来做排序。order by 和查询的限制是一样的,需要满足索引的最左前缀要求,否则无法使用索引进行排序。只有当索引的列顺序和 order by 子句的顺序完全一致,并且所有列的排序方向(正序或倒序)都一致,MySQL才能使用索引来做排序。如果查询是多表关联,只有当 order by 子句引用的字段全部为第一个表时,才能使用索引来做排序。以表 customer 为例,我们来看看哪些查询可以通过索引进行排序。mysql> create table customer( id int, last_name varchar(30), first_name varchar(30), birth_date date, gender char(1), key idx_customer(last_name,first_name,birth_date) );
- 2. 前缀索引 有时候需要对很长的字符列创建索引,这会使得索引变得很占空间,效率也很低下。碰到这种情况,一般可以索引开始的部分字符,这样可以节省索引产生的空间,但同时也会降低索引的选择性。那我们就要选择足够长的前缀来保证较高的选择性,但是为了节省空间,前缀又不能太长,只要前缀的基数,接近于完整列的基数即可。Tips:索引的选择性指,不重复的索引值(也叫基数,cardinality)和数据表的记录总数的比值,索引的选择性越高表示查询效率越高。完整列的选择性:mysql> select count(distinct last_name)/count(*) from customer;+------------------------------------+| count(distinct last_name)/count(*) |+------------------------------------+| 0.053 |+------------------------------------+不同前缀长度的选择性:mysql> select count(distinct left(last_name,3))/count(*) left_3, count(distinct left(last_name,4))/count(*) left_4, count(distinct left(last_name,5))/count(*) left_5, count(distinct left(last_name,6))/count(*) left_6 from customer;+--------+--------+--------+--------+| left_3 | left_4 | left_5 | left_6 |+--------+--------+--------+--------+| 0.043| 0.046| 0.050| 0.051|+--------+--------+--------+--------+从上面的查询可以看出,当前缀长度为 6 时,前缀的选择性接近于完整列的选择性 0.053,再增加前缀长度,能够提升选择性的幅度也很小了。创建前缀长度为6的索引:mysql> alter table customer add index idx_last_name(last_name(6));前缀索引可以使索引更小更快,但同时也有缺点:无法使用前缀索引做 order by 和 group by,也无法使用前缀索引做覆盖扫描。
- 1.2 适合 B-Tree 索引的查询类型 全值匹配和索引中的所有列进行匹配,如查找姓名为 George Bush、1960-08-08 出生的客户。mysql> explain select * from customer where first_name='George' and last_name='Bush' and birth_date='1960-08-08'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: refpossible_keys: idx1_customer key: idx1_customer key_len: 190 ref: const,const,const rows: 1 filtered: 100.00 Extra: NULL1 row in set, 1 warning (0.00 sec)匹配最左前缀只使用索引的第一列,如查找所有姓氏为 Bush 的客户:mysql> explain select * from customer where last_name='Bush'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: refpossible_keys: idx1_customer key: idx1_customer key_len: 93 ref: const rows: 1 filtered: 100.00 Extra: NULL1 row in set, 1 warning (0.00 sec)匹配列前缀只匹配某一列的值的开头部分,如查找所有以 B 开头的姓氏的客户,这里使用了索引的第一列:mysql> explain select * from customer where last_name like 'B%'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: rangepossible_keys: idx1_customer key: idx1_customer key_len: 93 ref: NULL rows: 1 filtered: 100.00 Extra: Using index condition1 row in set, 1 warning (0.00 sec)匹配范围值查找所有姓氏在 Allen 和 Bush 之间的客户,这里使用了索引的第一列:mysql> explain select * from customer where last_name between 'Allen' and 'Bush'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: rangepossible_keys: idx1_customer key: idx1_customer key_len: 93 ref: NULL rows: 1 filtered: 100.00 Extra: Using index condition1 row in set, 1 warning (0.00 sec)精确匹配某一列,并范围匹配另一列第一列全匹配,第二列范围匹配,如查找姓氏为 Bush,名字以 G 开头的客户:mysql> explain select * from customer where last_name='Bush' and first_name like 'G'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: rangepossible_keys: idx1_customer key: idx1_customer key_len: 186 ref: NULL rows: 1 filtered: 100.00 Extra: Using index condition1 row in set, 1 warning (0.00 sec)只访问索引的查询只需要访问索引即可获取数据,不需要回表访问数据行,这种查询也叫覆盖索引:mysql> explain select last_name from customer where last_name='Bush'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: refpossible_keys: idx1_customer key: idx1_customer key_len: 93 ref: const rows: 1 filtered: 100.00 Extra: Using index1 row in set, 1 warning (0.00 sec)除了上述这些查询类型外,索引还可以用于 order by 排序操作,因为索引中的节点是有序的。如果 B-Tree 可以按照某种方式查找到数据,那么也可以按照这种方式进行排序。
mysql查看索引相关搜索
-
mac osx
machine_start
macox
magellan
malloc
manifest
manifest文件
map
map 遍历
mapreduce编程
maps google com
margin
margin bottom
margin left
margin right
margin top
marginbottom
marginheight
marginleft
margintop