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

mysql varchar索引和int索引性能哪个好

发布网友 发布时间:2022-04-23 16:25

我来回答

3个回答

热心网友 时间:2022-04-07 22:15

性能相当,mysql中区别性能的是采用哪种索引方式,而不是索引的数据类型。
MySQL的btree索引和hash索引的区别
hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像btree(B-Tree)索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 hash 索引的查询效率要远高于 btree(B-Tree) 索引。

虽然 hash 索引效率高,但是 hash 索引本身由于其特殊性也带来了很多*和弊端,主要有以下这些。
(1)hash 索引仅仅能满足=,<=>,IN,IS NULL或者IS NOT NULL查询,不能使用范围查询。
由于 hash 索引比较的是进行 hash 运算之后的 hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 hash 算法处理之后的 hash 值的大小关系,并不能保证和hash运算前完全一样。

(2)hash 索引无法被用来避免数据的排序操作。
由于 hash 索引中存放的是经过 hash 计算之后的 hash 值,而且hash值的大小关系并不一定和 hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;

(3)hash 索引不能利用部分索引键查询。
对于组合索引,hash 索引在计算 hash 值的时候是组合索引键合并后再一起计算 hash 值,而不是单独计算 hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,hash 索引也无法被利用。

(4)hash 索引在任何时候都不能避免表扫描。
前面已经知道,hash 索引是将索引键通过 hash 运算之后,将 hash运算结果的 hash 值和所对应的行指针信息存放于一个 hash 表中,由于不同索引键存在相同 hash 值,所以即使取满足某个 hash 键值的数据的记录条数,也无法从 hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。

(5)hash 索引遇到大量hash值相等的情况后性能并不一定就会比B-Tree索引高。
对于选择性比较低的索引键,如果创建 hash 索引,那么将会存在大量记录指针信息存于同一个 hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下

热心网友 时间:2022-04-07 23:33

索引的性能好坏,主要是由建立索引字段的数据的分散程度决定,与字段类型无关。如果是完全相同的数据内容,int理论上性能略好,但是实际差异不可能体现出来。

热心网友 时间:2022-04-08 01:08

大部分开发会了解这样的《开发规范》:创建索引要选择区分度高的字段。他们会认为区分度低的字段不适合创建索引或者不适合添加到组合索引里面。但是这样的操作会导致很多慢查。举例来说:

select  * from  tab where a=1 and b=2;


场景 1 

符合 a=1的记录数有 10w 条记录 ,b=2 有 1000 条记录。如果只是创建idx_a(a),sql 请求通过索引idx_a访问 10w 条件记录,然后还要逐一匹配 10w 条记录中的 status,找到符合 b=2的记录。这个动作会导致慢查。如果创建组合索引idx_ab(a,b),sql 请求通过索引idx_ab可以直接定位到 1000 条记录,无需额外的过滤。这样减少访问 9900 条记录的时间,提升查询速度。

场景 2 

符合 a=1的有 100 条记录,status=2 有 10 条记录。其实场景 2 因为数据量比较少,直接访问 100 条记录和定位到 10 条记录的时间消耗相差不大,量变不足以引发质变,可以忽略了。


Tips:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果x爆屏是什么意思 手机爆屏修复大概要多少钱 我这狗狗是串串还是土狗 请问这是土狗还是串串? 有含盐30%的盐水50千克,要将其配置成盐45%的盐水100千克,需要加入水和... 一杯盐水含盐率20%盐四十克加水多少克 2000克浓盐水中含盐50%,需加水多少克? 含盐百分之五十的盐水40克,加入多少克水后可变成含盐百分之十的... 含盐50%的盐水100克,加入多少水就能得到40%的盐水 麦白霉素片不良反应 windows xp 怎么连手机热点? crv混动低配是液晶屏吗 MySQL-mysql bit字段和tinyint字段有什么区别 21款标配的本田crv能升级全液晶仪表? mysql中int,bigint,smallint 和 tinyint的区别详细介绍 2021crv液晶仪表盘样式可以调嘛 MySQL索引有啥好处,怎么合理的添加 mysql 连接符是什么? mysql中int(10)代表什么意思? mysql int 代表多长 mysql int(M) M是啥意思,最大是多少,多指教 MYSQL INT类型问题 mysql数据库内链查询和外链有什么区别 mysql identity 微软Exchange Activesync账户密码错误,怎么办? 邮票有什么作用? 《骆驼祥子》的经典情节的简介(全文的),作者,国家 骆驼祥子的人生启示是什么。。。 邮票的作用是什么? 《驼驼祥子》的读后感和对作者的了解 04款本田crv2.0仪表盘小液晶屏不亮怎么办? windowsXP系统台式机怎样连手机热点? mysql在int表格插入char类型 混动crv液晶盘显示EV是不是代表用电? MYSQL INNODB主键使用varchar和int的区别 本田crv2022年新款什么时候上市?, mysql 定义变量 东风本田crv的液晶无显示是什么原因 本田CRV仪表盘显示不正常该怎么办?08款CRV 仪表盘中的液晶屏乱码 Mysql的BigInt(20),Int(20)以及Bigint(32)有区别吗? CRV屏幕怎么退出到壁纸页面 crv和皓影哪个保值 台式xp电脑怎么连接手机热点 本田crv方向盘如何设置行车电脑显示屏 xp系统的电脑能连接手机个人热点吗? 本田CRV液晶屏打不开了咋回事? xp电脑如何设置热点网络给手机使用吗 本田CRV和大众探岳,究竟哪款车更值得购买? xp 系统台式电脑 现在有电信无线网卡,但是不知道怎样用它连接手机热点, 求具体操作方法 2016款crv可以更换全液晶仪表盘吗?