在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。
通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可。
通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。
可以把索引比作新华字典的音序表。例如,要查“库”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表,就只需要从 10 多页的音序表中直接查找。这样就可以大大节省时间。
因此,使用索引可以很大程度上提高数据库的查询速度,还有效的提高了数据库系统的性能。
索引的优缺点
索引有其明显的优势,也有其不可避免的缺点。
优点
索引的优点如下:
1、通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
2、可以给所有的 MySQL 列类型设置索引。
3、可以大大加快数据的查询速度,这是使用索引最主要的原因。
4、在实现数据的参考完整性方面可以加速表与表之间的连接。
5、在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间
缺点
增加索引也有许多不利的方面,主要如下:
1、创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
2、索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
3、当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。
使用索引时,需要综合考虑索引的优点和缺点。
老实说,看到这个问题的瞬间我是有点懵的状态,我原本只只知道Innodb引擎的表,最多只有1017列(至于为什么不是1024,可以百度一下), 下意识地就觉得索引最多可以创建1017个,但是仔细一想,不对啊, 索引可以是复合索引啊,那绝对不止1017,难道索引的数量会是1个很大的数据吗? 再仔细想想,以Innodb的抠门个性,不可能会是1个大的数值,然后去翻了下官方文档,看到如下内容。 This section describes limits for InnoDB tables, indexes, tablespaces, and other aspects of the InnoDB storage engine. 上面就清楚地写着, 1个表最大只能创建64个2级索引。 加上主键,那么上面的问题就有了答案,65个。 我试着填了65 的答案上去之后,点击提交,网站给我的回复是错误,我花了1个积分查看了正确答案【我回答是为了赚积分,没想到还赔了1个积分!!】 网站给的答案是:16. 纳尼! 怎么比官方的64还低! 然后我往刚才官方文档下面拉一拉,发现看了一个跟16的数字有关的描述: A maximum of 16 columns is permitted for multicolumn indexes. Exceeding the limit returns an error. ERROR 1070 (42000): Too many key parts specifiedmax 16 parts allowed 上面写的是,复合索引最多只能16列,超过就会报错。 有意思的是,然后我又在百度上搜索了相关的问题,没想到好几个答案都是写着16,我觉得16的应该是被别人给误导了,这个网站出题的这个作者,应该 也是百度了下,看到答案是16就给了个16的答案。 有心反馈这个问题,可惜没有渠道反馈,然后就在这里写下一点心得,关于技术的东西,发现有疑问或者怀疑的时候, 还是得翻一翻官方文档为好,起码能保证不会出错。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)