日期:2014-05-16  浏览次数:20476 次

MySql优化02:MySQL 数据库性能优化之表结构优化

MySql优化02MySQL?数据库性能优化之表结构优化

?

本文可以作为写SQL时的借鉴。

?

很多人都将数据库设计范式作为数据库表结构设计圣经,认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求。殊不知,在N年前被奉为圣经的数据库设计3范式早就已经不完全适用了。这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用。

?

由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作?IO?的时候是以?pageblock)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会使每个page中可存放的数据行数增大,那么每次?IO?可访问的行数也就增多了。反过来说,处理相同行数的数据,需要访问的?page?就会减少,也就是?IO?操作次数降低,直接提升性能。此外,由于我们的内存是有限的,增加每个page中存放的数据行数,就等于增加每个内存块的缓存数据量,同时还会提升内存换中数据命中的几率,也就是缓存命中率。

?

数据类型选择

数据库操作中最为耗时的操作就是?IO?处理,大部分数据库操作?90%?以上的时间都花在了?IO?读写上面。所以尽可能减少?IO?读写量,可以在很大程度上提高数据库操作的性能。

我们无法改变数据库中需要存储的数据,但是我们可以在这些数据的存储方式方面花一些心思。下面的这些关于字段类型的优化建议主要适用于记录条数较多,数据量较大的场景,因为精细化的数据类型设置可能带来维护成本的提高,过度优化也可能会带来其他的问题: