博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql数据库应用--索引(二)
阅读量:6278 次
发布时间:2019-06-22

本文共 2033 字,大约阅读时间需要 6 分钟。

创建索引

  • 创建表的时候创建索引

CREATE TABLE table_name [col_name data_type] [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name [length]) [ASC|DESC]

UNIQUE、FULLTEXT和SPATIAL为可选参数,分别表示唯一索引、全文索引和空间索引;INDEX与KEY为同义词,两者作用相同,用来指定创建索引;col_name为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择;index_name指定索引的名称,为可选参数,如果不指定,MySQL默认col_name为索引值;length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;ASC或DESC指定升序或者降序的索引值存储

  • 查看索引
CREATE TABLE `book`(`bookId` INT NOT NULL,`bookName` VARCHAR(255) NOT NULL,`authors` VARCHAR(255) NOT NULL,`info` VARCHAR(255),`comment` VARCHAR(255),`yearPublication` YEAR NOT NULL,INDEX(yearPublication) );

创建唯一索引

CREATE TABLE t1(`id` INT NOT NULL,`name` CHAR(30) NOT NULL,UNIQUE INDEX UniqIdx(id));

创建单列索引

CREATE TABLE t1(`id` INT NOT NULL,`name` CHAR(30) NOT NULL,INDEX SingleIdx(name(20)));

创建索引长度为20的单列索引

创建组合索引

CREATE TABLE t3(`id` INT NOT NULL,`name` CHAR(20) NOT NULL,`age` INT NOT NULL,`info` VARCHAR(255),INDEX MultiIdx(`id`, `name`, `age`));
  • 查看表的结构
SHOW CREATE TABLE t3;CREATE TABLE `t3` (  `id` int(11) NOT NULL,  `name` char(20) NOT NULL,  `age` int(11) NOT NULL,  `info` varchar(255) DEFAULT NULL,  KEY `MultiIdx` (`id`,`name`,`age`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

由结果可以看出,创建了id、name、age名为MultiIdx的组合索引

组合索引可起到几个索引的作用,但是使用时并不是随便查询哪个字段都可以使用索引,而是要遵循“最左前缀”原则:利用索引中最左边的列集来匹配行,这样的列集称为最左前缀。例如,这里有id、name和age三个字段构成的索引,索引行中按照id/name/age的顺序存放,索引可以搜索下面的字段组合:(id,name,age),(id,name)或者id。


EXPLANIN语句--查看索引

EXPLAIN SELECT * FROM book WHERE yearPublication=2016;

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE book ref yearPublication yearPublication 1 const 1

EXPLANIN语句输出结果的各行解释如下:

(1) select_type: 指定所使用的SELECT查询类型,这里值为SIMPLE,表示简单的SELECT,不使用UNION或子查询。其他可能的取值有PRIMARY、UNION、SUBQUERY等。

(2) table: 指定数据库读取的数据表的名字,它们按被读取的先后顺序排列。

(3) type: 指定本数据库表与其他数据表之间的关联关系,可能的取值有system、const、eq_ref、ref、range、index、和all。

(4) possible_keys: 给出MySQL在搜索数据记录时可选用的各个索引。

(5) key: MySQL实际选用的索引。

(6) key_len: 给出索引按字节计算的长度,key_len的数值越小,表示查询速度越快

(7) ref: 给出关联关系中另一个数据表里的数据列的名字。

(8) rows: MySQL在执行这个查询时预计会从这个数据表里读出的数据行的个数。

(9) extra: 提供与关联操作有关的信息。

转载地址:http://bofva.baihongyu.com/

你可能感兴趣的文章
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
多线程基础知识
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>