常用优化包括
- 合理的选择拆分字段。选择拆分字段时需要综合考虑查询性能、分布式事务、热点、数据迁移等多个因素;
- 掌握SQL的执行计划,尤其是核心SQL。对于不确定的SQL应在分布式数据库执行 ‘explain sql’命令,确定SQL有没有跨分区、有没有改写以及底层有没有合适的索引,合并时是否进行了排序和分组动作;
- 对底层MySQL建立合适的索引,这一点看似与分布式数据库无关,但却是最重要的。分布式数据库的高性能依赖于底层数据库的高性能,而对底层数据库性能来说,建立需要的索引是重要的环节;
- 确保语句能正确使用到索引,例如查询条件能被索引完全覆盖到,保证分区键上有索引等;
- 查询尽量在单机完成,最为简单的方式就是在分区字段上指定等值条件,使操作只发送到一个后台数据库节点。若不指定,则操作需要发送到每个后台节点,可能导致性能大幅下降;
- 尽量避免分布式事务和分布式查询;
- 同时使用其他适用于MySQL的优化手段。
设计表结构的过程
- 预估数据量、访问规模,准备测试数据,测试原始数据库的性能基线;
- 分析和设计表结构、约束、索引;
- 分析和设计分区方式和分区字段;
- 分析和设计常用sql语句访问的频度和分区数量
- 分析和设计需要聚合、排序、分组、条件过滤的字段;
- 重新在分布式数据测试性能基线;
- 调整分布式数据库的配置参数,重新观察系统;
- 调整读写比例、并发活跃连接数,重新观察系统;
- 比较结果,找出正确的优化方式。