如何做到一个好的查询?
schema设计,索引设计,查询语句设计(走索引,limit语句尽量减少扫描的行,union语句优化,排序和分组走索引,没有索引就走关联查询的标识列,count的应用)还有可以通过一些高级特性如分区
业务设计优化:垂直拆分(字段拆分,多次查询少关联),水平拆分(分库,分表),归档(增加写的压力,把不同状态的表记录写到不同的表中,减少表中没必要扫描的行)
评估三大指标:响应时间,扫描的行,返回的行
分区的好处:
太大的表无法走索引(查询在覆盖索引范围内除外),索引大而且容易产生碎片,多条记录去回表查询字段会产生很多次随机i/o。而分区相当与一个大的索引概念,分区表数据容易维护,批量删除大量数据可以直接使用清除
整个分区的方式,还可以对独立一个分区做优化,检查和修复等操作。分区表可以存放在不同的物理设备。分区表可以避免单个索引的互斥访问(每个分区的索引都是单独构建的,如果查询的索引列互斥条件分别在两个分区时,可以走索引加快速度)。分区可以独立
备份和恢复
分区的限制:
一个表的分区最多只有1024个分区;分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进来;分区表无法使用外键约束;查询分区会先锁住底层表;
分区的建立:
一个表分区最好不要超过150个;热点单独分区;创建分区时使用了表达式,查询时只能根据列来过滤分区;分区键最好和索引列一致(因为不一致的化,根据索引查询会去查询所有分区的索引,因为每个分区的索引都是独立的)