看到有人在争辩数据库唯一索引和普通索引哪个快?自增、整型索引和字符串索引哪个快?一些人张口就来:“一样快!”,通常来说,这种回答是不对的,虽然我不是专业的BDA,但是从程序设计的角度,我们可以聊聊这两个问题。
首先,唯一索引和普通索引本质上其实没有区别,因此给人以误解,既然都是索引,那么就应该一样块才对,但是,唯一索引和普通索引除了都是索引,唯一索引还在索引基础上增加了唯一约束,那么,这个唯一约束就成了唯一索引和普通索引之间的差异项。
通常,唯一约束需要额外的空间来存储,那么从程序设计的角度(因为数据库毕竟也是程序),在查询时,若只关心索引,那么唯一索引和普通索引可能只需要关心“索引”这个关键项,但是,在数据插入时,唯一索引则需要额外检查数据的唯一性,因此,唯一索引的开销是要比普通索引大的!通常来说,在查询时,唯一索引可能也要检查唯一约束,这个具体得看情况。
但综合来说,唯一索引肯定是要比普通索引开销要大一些的!
另外,自增索引或者整型索引和字符串索引哪个更快?通常我会这么排序:自增索引<数字索引<字符串索引。也就是说,自增索效率更高,然后是整型索引,最后才轮到字符串索引。但是,这种排序通常不是绝对,只是大多数情况下是这样的,我们不要去杠一些小概率事件,比如说索引值聚集、大数值等等。
自增索引有它优势之处,唯一性、顺序性,这就让人联想到了数组下标或者一连串顺序的内存块。因此,在查询、插入效率上,自增索引的这种特性,无疑在效率上是要优于后两者的。
数字型索引和自增索引的区别就是可能不唯一、不顺序,因此,在数据插入时可能会相比自增索引有稍高的开销,但在查询效率上通过排序加速,往往会有与自增索引相当的查询速度。
字符串索引因为可能涉及到一些字符集编码比较且可能在存储地址中分布不均,因此,在查询时效率相比数字型索引是要低很多的,在数据插入时可能仍然会面临这些问题。
下面是我做的测试用例,可以明显看到,如果单看查询速度,跟我说的是一样的:
所以,不管一个人懂不懂数据库调优,在设计表结构的时候,能用自增索引就用自增索引,其次是数字型索引,最后才是字符串型索引。能用普通索引就用普通索引,其次才是唯一索引。
注:本文为发布者本人原创,所述内容仅代表作者个人观点,欢迎不同声音,但请友善发言!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.