社区
MySQL
帖子详情
bigint和int对索引性能的影响差别大么?
寒冰2046
2011-07-06 09:59:20
现在有一个主键用unsigned int的,初步估计是够用的,不过还是有点担心。现在想换成bigint的,而bigint是8个字节的,比int大一倍。
参考手册中提到一个索引页的默认大小是16KB,那么是不是意味着:如果采用bigint类型,一个索引页只有保存16KB/8=2K条记录,而int可以保存4K条?
现在考虑的问题是bigint的索引性能是不是比int差较多?
...全文
1337
6
打赏
收藏
bigint和int对索引性能的影响差别大么?
现在有一个主键用unsigned int的,初步估计是够用的,不过还是有点担心。现在想换成bigint的,而bigint是8个字节的,比int大一倍。 参考手册中提到一个索引页的默认大小是16KB,那么是不是意味着:如果采用bigint类型,一个索引页只有保存16KB/8=2K条记录,而int可以保存4K条? 现在考虑的问题是bigint的索引性能是不是比int差较多?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shine333
2011-07-07
打赏
举报
回复
[Quote=引用 3 楼 linkor 的回复:]
引用 2 楼 shine333 的回复:
你的数据库真会出现这么大的量?
我的看法是,先用unsigned int。到了unsigned int都要溢出的时候,估计你早就分表/库了
另外,从索引性能来讲,肯定会有影响,比如加载相同数量的记录条数的索引进内存,内存占用肯定翻倍。也就是相同内存可以加载的信息少了,读取相同数量信息的次数翻倍,但由此带来的性能差距不是本质的影响。
数……
[/Quote]
分表,分库,不是简单的把一张表分开,然后ID还互相冲突
寒冰2046
2011-07-07
打赏
举报
回复
[Quote=引用 4 楼 acmain_chm 的回复:]
内在现在一般不是问题,无非是索引多放几个页。
理论上选择够用的就可以,如果可以预测,或者无法肯定 INT可以满足要求,则应该选择 BIGINT.
[/Quote]索引多放几个页不会在搜索时降低命中率么?不会影响性能?
shine333
2011-07-06
打赏
举报
回复
你的数据库真会出现这么大的量?
我的看法是,先用unsigned int。到了unsigned int都要溢出的时候,估计你早就分表/库了
另外,从索引性能来讲,肯定会有影响,比如加载相同数量的记录条数的索引进内存,内存占用肯定翻倍。也就是相同内存可以加载的信息少了,读取相同数量信息的次数翻倍,但由此带来的性能差距不是本质的影响。
rucypli
2011-07-06
打赏
举报
回复
对 索引会比原来大一倍
对索引的io是原来的两倍 毕竟还是一个数量级的
ACMAIN_CHM
2011-07-06
打赏
举报
回复
内在现在一般不是问题,无非是索引多放几个页。
理论上选择够用的就可以,如果可以预测,或者无法肯定 INT可以满足要求,则应该选择 BIGINT.
寒冰2046
2011-07-06
打赏
举报
回复
[Quote=引用 2 楼 shine333 的回复:]
你的数据库真会出现这么大的量?
我的看法是,先用unsigned int。到了unsigned int都要溢出的时候,估计你早就分表/库了
另外,从索引性能来讲,肯定会有影响,比如加载相同数量的记录条数的索引进内存,内存占用肯定翻倍。也就是相同内存可以加载的信息少了,读取相同数量信息的次数翻倍,但由此带来的性能差距不是本质的影响。
[/Quote]数据库的量不太可能占用完unsigned int,只是目前是想分段来用的,ID一般是断断续续的。段分小了不方便管理,分大了有可能一些段利用率太低而造成大量浪费甚至导致溢出,具体策略还在分析中。
另外,这个ID关联了相当多的表,是一直活跃的字段,即使分表、分库,也要保证ID的唯一性吧,所以分表或分库应该都不能解决问题。
对比MySQL中
int
、char以及varchar的
性能
网络上有许多似是而非的“谣言”,当然都不是恶意,绝大部分都是开发者不愿意自己主动研究,反而轻信其他人的信口之言。 关于数据库的谣言也有不少,比如“
int
性能
比char高很多”。 我最近针对
int
、long、char、varchar进行了一次
性能
测试,发现它们其实并没有太大的
性能
差距: 备注:c8=char(8), s8=varchar(8), i8=(
bi
gin
t), c4=char(4), s4=varchar(4), i4=char(4) 100w行无
索引
情况下查询: 执行[c8查询]20次, 平均耗时312.0ms 执行[s8查询]20次, 平均耗时334.3ms 执行[i8查
Sql面试题2023秋招精选
7.
索引
怎么设计(优化) ①选择唯一性
索引
:值是唯一的,查询的更快。 ②经常作为查询条件的字段加
索引
。 ③为经常需要排序、分组和联合操作的字段建立
索引
:order by、group by、union(联合)、distinct(去重)等。 ④限制
索引
个数:
索引
数量多,需要的磁盘空间就越多,更新表时,对
索引
的重构和更新就很费劲。 ⑤表数据少的不建议使用
索引
(百万级以内):数据过少,有可能查询的速度,比遍历
索引
的速度都快。 ⑥删除不常用和不再使用的
索引
。 ⑦用类型小的类型做
索引
:比如:
int
和
BI
GIN
T能用
int
就使用
int
。因为类型小,查询速度快和
索引
占用的空间更少。 ⑧使用前缀
索引
,要是字符串越长,那么
索引
占的空间越大,并且比较起来就时间就越长。
MySQL数据库中把
int
转化varchar引发的慢查询
最近一周接连处理了2个由于
int
向varchar转换无法使用
索引
,从而引发的慢查询。 CREATE TABLE `appstat_day_prototype_201305` ( `day_key` date NOT NULL DEFAULT '1900-01-01', `appkey` varchar(20) NOT NULL DEFAULT '', `user_total`
bi
gin
t(20) NOT NULL DEFAULT '0', `user_activity`
bi
gin
t(20) NOT NULL DEFAULT '0', `times_total`
bi
gin
t(20) N
Sql Server 数据库
索引
整理语句,自动整理数据库
索引
在一个大型数据库中,数据的更改是非常频繁的。 而建立在这些数据上的
索引
也是需要经常去维护的。 否则这这些数据
索引
就起不到起应起的作用。甚至会成为数据库本身的负担。 我们就要定期的对数据库的
索引
进行维护 我在MSDN上发现了这个脚本不过其中有些小问题我已经修正 大家可以使用这个脚本对数据库的
索引
进行日常维护 代码如下:SET NOCOUNT ON; DECLARE @objectid
int
; DECLARE @indexid
int
; DECLARE @partitioncount
bi
gin
t; DECLARE @schemaname sysname; DECLARE @objectnam
PostgreSQL 查看数据库,
索引
,表,表空间大小的示例代码
一、简介 PostgreSQL 提供了多个系统管理函数来查看表,
索引
,表空间及数据库的大小,下面详细介绍一下。 二、数据库对象尺寸函数 函数名 返回类型 描述 pg_column_size(any)
int
存储一个指定的数值需要的字节数(可能压缩过) pg_database_size(oid)
bi
gin
t 指定OID的数据库使用的磁盘空间 pg_database_size(name)
bi
gin
t 指定名称的数据库使用的磁盘空间 pg_indexes_size(regclass)
bi
gin
t 关联指定表OID或表名的表
索引
的使用总磁盘空间 pg_relation_size
MySQL
56,678
社区成员
56,708
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章