关于字段、记录、行大小的数量限制和合理取值。
字段数量
以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个索引就差不多了
这个随意啦,但是索引影响性能,索引多了数据量一大,插入数据会很感人的。