问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是索引?索引有哪几种?什么时候用索引比较好?

发布网友 发布时间:2022-04-30 01:54

我来回答

3个回答

热心网友 时间:2022-04-08 07:58

索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

索引的类型

MySQL提供多种索引类型供选择:

普通索引

这是最基本的索引类型,而且它没有唯一性之类的*。普通索引可以通过以下几种方式创建:

创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

唯一性索引

这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:

创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表)
);

主键

主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。

全文索引

MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引,要了解更多信息,请参见MySQL documentation。

单列索引与多列索引

索引可以是单列索引,也可以是多列索引。下面我们通过具体的例子来说明这两种索引的区别。假设有这样一个people表:

CREATE TABLE people ( peopleid SMALLINT NOT NULL AUTO_INCREMENT, firstname CHAR(50)
NOT NULL, lastname CHAR(50) NOT NULL, age SMALLINT NOT NULL, townid SMALLINT NOT
NULL, PRIMARY KEY (peopleid) );

热心网友 时间:2022-04-08 09:16

简单的说,索引就好比一本书的目录,你只要浏览标题就可以快速的找到具体内容是放在哪一页的。也就是说用SELECT查找时不用直接去搜索表,只要查找索引,就可以直接定位到你想查找的内容位置。

索引带来的方便不是免费的,是以每次插入或更新(相当于删除并插入)时都要维护索引为代价的。

所以如果一张表更多是用于查询而很少插入,那么就可以建立尽量多的索引以优化查询性能。相反如果一张表要经常插入或更新,则尽可能少用索引,有时甚至连主键都不建。

热心网友 时间:2022-04-08 10:51

你这些问题问的都很好,不过都不是一句两句话可以说的清楚的。
其中的第一个说法正好说法了,唯一索引允许有一个null,但主键索引是不允许有null的(是主键就不允许为nlll)
聚焦索引好比字典中按字母顺序排列的概念,所以这种顺序只能有一个。
非聚焦索引好比汉语字典中的偏旁部首,所以有按部首查字和拼音查字的区别,很显然,其目的都是为了提高检索效率。
删除索引的顺序主要目的在于释放索引所占据的空间。
针对字典的情况,你可以自己想一想,什么时候可以直接根据字母顺序查找字,什么时候需要根据偏旁部首去查询。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“笑指旧山归路长”的出处是哪里 PCB为什么要拼板,PCB拼板打样有哪些好处? 绘制紫外吸收光谱时,我发现最大吸收波长是333nm,此时吸光度为4.01 对吸光度测量值有何影响? 陆垚知马俐的歌词是什么? 玫瑰花水中的养殖方法 陈年柚子茶如何做 陈年柚子茶的制作方法 在答题卡上改题号是指那一道题扣分还是整个卷子都没? ...考试时我写到了卷子上,会怎么样?会不会按抄袭 高考时在卷子上不小心画了道怎么办? 什么是全文索引? 全文索引和目录索引的区别是什么? 怎么投诉圆通快递? mysql...指定了索引为 FULLTEXT ,用于全文索引。&quot;FULLTEXT &quot;,&quot;全文... 请问什么是全文索引? 梦见很多人被枪杀,但是自己却逃了,这究竟意味着什么,好可怕 梦见别人枪杀 青岛社保公积金的最低基数是多少 青岛市16年社保基数 2016年社保缴费基数青岛是多少钱 梦见别人被枪杀而且被煮着吃了,是啥意思呀 如何查青岛2016社保缴费基数 2016青岛社保缴费多少钱一个月 手机qq怎么截图发给客服 16年青岛社保缴费基数 一般情况下,空调制热开一天一夜(24小时),会浪费大概多少度电?大概多少钱? 怎样在手机QQ上截图然后发给对方? 形容“做饭”的诗句有哪些? 电脑高手帮帮我 电脑高手帮帮我 圆通最狠的投诉方法 微信sqlite本地全文索引搜索是怎么做的呢 mysql的全文搜索和全文索引是什么关系?是说建立全文索引后才能使用全文... AJ11舒适感怎么样,适合打球吗 乔丹AJ11,现在还能穿着实战吗? 目录索引和全文索引区别是什么?为什么新浪是目录索引?我看和百度差不多... 数据库中的全文索引在项目开发中有什么用呀 AJ11编织是篮球鞋吗 能穿着打篮球吗? AJ11大魔王适不适合外场? 急!!! aj11大灌篮穿着可以打篮球吗? air jordan 11 low aj11 乔11打球好穿吗 aj11女款到底减配到什么程度,有碳板吗,可以打球吗 求助,新买的金士顿U盘为啥速度那么慢 aj11、AJ17、AJ18还有2K4选哪双好? 我最近入了双AJ11黑红配色的,压马路好呢?还是实战呢?压马路耐磨怎么样... aj11大魔王和欧文2你们更看好那个,那个更适合打篮球?(我不是外表党不要说外表) 微信银行卡限额 定期存款到期前一天可以取吗 圣罗兰口红试色16 和46哪个更好看 定期存款到期了提前一天取,按什么算