mysql数据库在建表的时候,这个表最合理是建多少个字段合适?也就是说最好有多少列最合理?

关于字段、记录、行大小的数量限制和合理取值。

字段数量

以mysql为例,实践经验是不超过20的字段。

字段首先符合设计范式要求,自然就有合理的字段数量了,其次假设当某表的字段仍然太多时,可以根据业务情况进行拆分,比如根据常用字段和非常用字段将一张表拆分成两张。

Row Size

单条记录的大小不应超过硬盘的扇区大小,一般是4k

单张表多少个字段其实没有什么定论,只要不超过数据库限定的个数就好,但是表的单条记录的大小是有合理空间的,也就是需要根据具体硬件和操作系统来确定单条记录(row size)的大小:一般来说,现在硬盘的扇区大小都是4K(有些硬盘可以到16K),所以存储基于操作系统的MySQL单条记录的合理大小应不超过硬盘的扇区大小。如果超出意味着查找单条记录时需要多个磁盘扇区去查找,增加了寻道时间,单表数据量大了性能会下降。同时MySQL配置的缓存页大小即innodb_page_size,也要配置成硬盘扇区大小差不多大小,从而减少数据库checkpoint从缓存往磁盘写数据的工作量。话说回来,其实这些并不十分重要,因为一般系统出现性能问题大概率是在应用程序的质量上。

BOLB 或者 TEXT 字段

假如一行中有很多巨大的 BOLB 或者 TEXT 字段,表的存储能力就会受限制。

记录数量

以mysql为例,实践经验是不超过500w条记录。一般来说,数据量到达一千万以后,增删改查就很慢了。

如果存储大型数据基本上还是建议 SQL Server 或者是 Oracle。

记录数量限制

一般数据库默认都会有限制,可更改。
注意:navicat默认快速打开表限制1000行,但不是数据库有限制。
表空间内存也可以设置限制。

其实没有严格规定,根据数据库建表三大范式来吧

 

关于索引

一个表最多16个索引,最大索引长度256字节

索引一般不明显影响插入性能(大量小数据例外),因为建立索引的时间开销是O(1)或者O(logN)

索引的方式本来就有些偏向于空间换时间的方式;
然而索引的字段不能太大,否则除了占空间之外,在动态变更索引、查询上开销也会比较低效。
一般考虑使用基础类型(int/long/bit) 此类作为索引,需要规避大文本字段作为索引的做法!

没有最多几个的限制,想设多少都行,但是多设了没意义。
建议统计看看查询语句的频率,那个字段的查询更频繁就设那个做索引

百万数据量也不算多,但是索引8个我觉得有点多,可以考虑组合索引,利用前缀索引进行优化。
是否有必要建索引可以通过索引选择性 count(DISTINCT(字段))/count(*)来判断,值越大则索引利用率越高。

好像是没得限制的,而且你已经有八个索引了,一般dml 语句频繁的话,建3-5个索引就差不多了

这个随意啦,但是索引影响性能,索引多了数据量一大,插入数据会很感人的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值