十几年来使用的主要数据库就是MS SqlServer,对于提高查询速度的方法也考虑了很多,如果具体到建表这个条件,能采取的措施主要如下:
- 选择好数据库主键,主键作为聚集索引,直接决定了数据存储的格式和顺序,它对于提高查询速度,特别是能利用上主键的查询,具有决定性的意义。
- 合理建立索引,除了主键,其他非聚集索引就是最重要的因素了,如果某项查询能命中一个索引,查询速度会有几倍甚至几十倍的提升,但是索引也是有代价的,它一是会对存储有影响,会占用额外的空间,二是对于增删改操作都有可能引起索引的变化,从而减少这些操作的执行效率。所以,要根据预期的业务情况,合理建立索引,也可以在系统运行一段时间后,根据实际业务需要,再建立索引。
- 冗余字段的设计,对于特定的业务,有时需要多表连接查询,这时候有可能会影响查询效率,为了提高查询速度,也可以酌情加上冗余字段,把多表查询变成单表查询,这在提高速度的同时,也会代理存储和数据一致性的问题,需要通盘考虑。
- 字段类型的选择,这个影响较小,具体的业务要求不同,有时候也需要考虑,比如对于主键或其他需要做比较的字段,一个整形的类型,查询效率会高于一个字符串,不过,不能因此影响业务的实现。
- 分表,对于特别大的,随时间累计的数据,可以分表来处理,比如每个月份建一个表,表结构完全一样,查询时根据时间段来决定从哪些表查询,这会大幅提高查询效率,但是数据维护逻辑会变的复杂一些。
- 数据分区,这种方式和分表有点相像,但是最好和物理磁盘配合,充分利用多磁盘并发读取的优点。
- 内存表,sqlserver2014后,提供了内存表的概念,在特定情况下,可以把所有的数据都加载到内存中,极大提高存取速度,不过这种有一定的限制,不能作为通用的优化方法。
- 业务逻辑设计,在设计业务逻辑的时候,就充分考虑实体对象之间的关系,合理建立实体表和关系表,这也和具体的业务有关系,需要具体分析。
其实,很多时候,优化还要通盘考虑,特别是在应用端,也有很多优化措施,比如缓存、分页、存储过程利用、大数据统计临时表等,结合数据库的特点,共同来提高查询速度。
赞同0