iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL的show index 选择率
  • 815
分享到

MySQL的show index 选择率

2024-04-02 19:04:59 815人浏览 薄情痞子
摘要

show index from tbl_name\G;里面的每个字段信息各代表什么呢?DROP TABLE IF EXISTS t;CREATE TABLE t(a  int not null,b

show index from tbl_name\G;

里面的每个字段信息各代表什么呢?

DROP TABLE IF EXISTS t;

CREATE TABLE t(

a  int not null,

b varchar(2000) ,

c int not null,

d int,

e varchar(200),

primary key(a),

key idx_b(b),

key idx_c(c),

key idx_c_b(c,b),

unique key(d),

key idx_e(e(10))

)engine=innodb;


Mysql>show index from t;

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

| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |

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

| t     |          0 | PRIMARY  |            1 | a           | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |

| t     |          0 | d        |            1 | d           | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |

| t     |          1 | idx_b    |            1 | b           | A         |           0 |      191 | NULL   | YES  | BTREE      |         |               |

| t     |          1 | idx_c    |            1 | c           | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |

| t     |          1 | idx_c_b  |            1 | c           | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |

| t     |          1 | idx_c_b  |            2 | b           | A         |           0 |      191 | NULL   | YES  | BTREE      |         |               |

| t     |          1 | idx_e    |            1 | e           | A         |           0 |       10 | NULL   | YES  | BTREE      |         |               |

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

7 rows in set (0.00 sec)



#说明

TABLE:索引所在的表名

Non_unique:非唯一的索引,必须要唯一, 例如上面定义到主键a,unique d   都是显示是0

Key_name:索引的名字

Seq_in_index:索引中该列的位置,如idx_c_b 的联合索引

Column_name:索引列的名称

Collation:列是以什么方式存在在索引中索引中的,可以是A或是NULL,B+树索引总是A,即是排序的。如果使用了Heap存储引擎,并且建立了Hash索引,这里就会显示NULL了

          因为Hash根据hash桶存放索引数据的,而不是对数据进行排序。

Cardinalilty:这个值非常关键,表示索引中唯一值的数目的估计值。Cardinality表的行数应尽可能接近1(为什么?怎么计算这个值?),下面会对这个字段进行详细的说明:

Sub_part:是否是列的部分索引,例如上面的idx_e就显示10,表示只对e列的前10个字符进行索引。如果索引整个列,则该字段为NULL。(idx_b,idx_c_b为什么只索引191个呢?)

Packed:关键字如何被压缩。若没有,则显示为NULL

Null:是否索引的列含有NULL值,例如看到的idx_b,就表示可以有NULL值,所以显示YES,而主键和定义了c列就不允许有NULL值

Index_type:索引的类型,InnoDB存储引擎只支持B+树索引,所以这里显示的都是BTREE。

Comment:注释

Index_comment:索引注释


////////////////////////////////////////

Cardinalilty:因为单词的意思为:基数、基准的意思

 并不是在所有的查询条件中出现的列都需要添加索引,对于什么时候添加B+树索引,一般情况下,在访问表中很少的一部分数据时使用B+树索引才有意义。对于性别字段、地区字段、

类型字段,它们可取值的范围很小,成为低选择性。

e.g:

select * from stu where sex='F';

按性别进行查询时,可取值的范围一般只有'M','F'。因此上述得到结果可能是表50%的数据。这时添加索引完全没有必要。

相反,如果某个字段的取值范围比较广,几乎没有重复,即属于高选择性,则使用索引比较合适。

那怎么样看索引是否有高选择率呢?

一是通过show index结果中的列Cardinalilty来观察,此值表示索引中不重复记录数量的预估值(是通过采用来进行计算的),这个值不是一个精确值。Cardinalilty/table_row_counts尽可能的接近1


InnoDB存储引擎内部对更新Cardinalilty信息的策略为:

1.表中1/16的数据已发生变化就需要更新信息

2.stat_modified_counter>2 000 000 000 (20亿)

也是就是当计数器stat_modified_counter发生变化的次数大于20亿时,需要更新Cardinalilty信息。


第二种方法可以用sql语句来进行计算是否是高选择率:

DROP TABLE IF EXISTS t_car;

CREATE TABLE t_car(

id BIGINT NOT NULL AUTO_INCREMENT ,

mem_id BIGINT NOT NULL,

status TINYINT(1),

dept_no INT NOT NULL,

PRIMARY KEY(id),

KEY idx_mem_id(mem_id),

KEY idx_status(status),

KEY idx_dept_no(dept_no)

)ENGINE=innodb;


insert into t_car values(NULL,1,1,101);

insert into t_car values(NULL,2,0,102);

insert into t_car values(NULL,3,1,103);

insert into t_car values(NULL,4,1,104);

insert into t_car values(NULL,5,0,105);

insert into t_car values(NULL,6,1,106);

insert into t_car values(NULL,7,1,107);

insert into t_car values(NULL,8,0,108);

insert into t_car values(NULL,9,1,109);

insert into t_car values(NULL,10,1,110);


insert into t_car

select NULL,id,status,dept_no from t_car;   -- 多多执行几次


mysql>select count(*) from t_car;

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

| count(*) |

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

|    20480 |

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

1 row in set (0.10 sec)




mysql>update t_car set mem_id=id;

Query OK, 20460 rows affected (3.43 sec)

Rows matched: 20480  Changed: 20460  Warnings: 0


mysql>show index from t_car;

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

| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |

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

| t_car |          0 | PRIMARY     |            1 | id          | A         |       20108 |     NULL | NULL   |      | BTREE      |         |               |

| t_car |          1 | idx_mem_id  |            1 | mem_id      | A         |       20108 |     NULL | NULL   |      | BTREE      |         |               |

| t_car |          1 | idx_status  |            1 | status      | A         |       10054 |     NULL | NULL   | YES  | BTREE      |         |               |

| t_car |          1 | idx_dept_no |            1 | dept_no     | A         |       20108 |     NULL | NULL   |      | BTREE      |         |               |

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

4 rows in set (0.00 sec)



root@localhost[zjkj]:04:07:14>select count(distinct(id))/count(*) as id_select,count(distinct(status))/count(*) as status from t_car;

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

| id_select | status |

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

|    1.0000 | 0.0001 |

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

1 row in set (0.16 sec)


#说明id列的选择率较高,适合建立索引,而status列选择性较低,因此status列上不适合建立索引。

这也是为什么Cardinality表的行数应尽可能接近1越好的缘故了。


您可能感兴趣的文档:

--结束END--

本文标题: MySQL的show index 选择率

本文链接: https://www.lsjlt.com/news/42748.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL SHOW INDEX语法是什么意思
    这篇文章主要介绍“MySQL SHOW INDEX语法是什么意思”,在日常操作中,相信很多人在MySQL SHOW INDEX语法是什么意思问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • MySQL查看索引语句:SHOW INDEX 详细讲解
    概述: SHOW INDEX语句是MySQL中用于查看表索引信息的语句。它提供了有关表中索引的详细信息,包括索引名称、索引类型、关联的列等。以下是SHOW INDEX的详细说明: 语法: SHOW INDEX FROM table_name...
    99+
    2023-09-20
    mysql 数据库 java
  • mysql的show processlist
    mysql> show processlist; show processlist;只列出前100条,用show full processlist;可以展示所有的会话。 id...
    99+
    2024-04-02
  • MySQL中的show命令
    mysql> help showName: 'SHOW'Description:SHOW has many forms that provide information about databases, t...
    99+
    2024-04-02
  • MySQL常用的show命令
    这篇文章主要讲解了“MySQL常用的show命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL常用的show命令”吧! MySQL中有很多的基本...
    99+
    2024-04-02
  • 使用关系型选择器优化CSS选择器:提升选择效率的技巧
    优化CSS选择器:如何使用关系型选择器提高选择效率引言:在前端开发中,CSS选择器是一个非常重要的概念。它用来为HTML元素添加样式,控制页面的外观和布局。然而,在大型项目中,优化CSS选择器的效率显得尤为重要。本文将介绍如何使用关系型选择...
    99+
    2023-12-26
    优化 CSS选择器 关系型
  • Pandas通过index选择并获取行和列
    目录获取pandas.DataFrame的列列名称:将单个列作为pandas.Series获得列名称的列表:将单个或多个列作为pandas.DataFrame获得获取pandas.D...
    99+
    2023-02-23
    Pandas index获取行和列 Pandas 获取行列
  • mysql中show的用法
    mysql show 命令用于显示数据库信息,包括数据库、表、视图等。其语法为:show [选项] [对象类型] [模式名] [对象名]。常用选项包括 full(显示所有信息)、like...
    99+
    2024-05-01
    mysql 作用域
  • 如何选择电脑电源率
    这篇文章主要介绍“如何选择电脑电源率”,在日常操作中,相信很多人在如何选择电脑电源率问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何选择电脑电源率”的疑惑有所帮助!接下来,...
    99+
    2022-12-01
    电脑
  • windows 3dmark分辨率怎么选择
    这篇文章主要介绍了windows 3dmark分辨率怎么选择的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇windows 3dmark分辨率怎么选择文章都会有所收获,下面我们一起来看看吧。3dmark分辨率选择...
    99+
    2023-07-01
  • Pandas怎么通过index选择并获取行和列
    本篇内容主要讲解“Pandas怎么通过index选择并获取行和列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas怎么通过index选择并获取行和列”吧!通过指定pandas.DataF...
    99+
    2023-07-05
  • IDE的选择:如何提高ASP学习效率?
    ASP(Active Server Pages)是一种基于服务器端的脚本语言,通常用于Web应用程序的开发。在学习ASP的过程中,选择一个合适的IDE(集成开发环境)是非常重要的。一个好的IDE可以极大地提高你的学习效率,让你更加专注于代...
    99+
    2023-10-05
    学习笔记 ide 数据类型
  • mysql中describe和show的区别
    describe 描述表结构(列名、数据类型、约束、索引),仅适用于表对象。而 show 显示有关数据库对象(数据库、表、列、函数、过程等)的元数据,包括表中列的简要列表和数据库服务器的...
    99+
    2024-04-29
    mysql
  • 选择mysql的原因有哪些
    今天小编给大家分享一下选择mysql的原因有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • MySQL中的SHOW ENGINE INNODB STATUS举例分析
    本篇内容介绍了“MySQL中的SHOW ENGINE INNODB STATUS举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望...
    99+
    2024-04-02
  • PHP选择 MySQL 数据库
    ...
    99+
    2024-04-02
  • 云服务器怎么选择带宽的内存频率
    云服务器的带宽是一个很有意思的话题,因为不同的云服务器提供商提供的内存频率可能相差很大。以下是一个简单的选择带宽的公式,用于选择您需要的带宽: 带宽:服务器内存带宽+服务器硬盘带宽 根据这个公式,我们需要选择一个足够大的服务器,并选择足够...
    99+
    2023-10-26
    频率 带宽 内存
  • CSS中的选择器种类介绍及效率的比较
    这篇文章主要讲解了“CSS中的选择器种类介绍及效率的比较”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS中的选择器种类介绍及效率的比较”吧!我们都知道,...
    99+
    2024-04-02
  • 如何理解MYSQL中的SHOW VARIABLES语句
    这篇文章将为大家详细讲解有关如何理解MYSQL中的SHOW VARIABLES语句,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 mysqld服务器维护两...
    99+
    2024-04-02
  • mysql中的字段选择是什么
    这篇文章主要讲解了“mysql中的字段选择是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中的字段选择是什么”吧!说明根据实际需要,明确所需字段名称,用英文逗号分隔。获取所有字...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作