图片
图片
图片
图片
图片
图片
图片
图片
图片
SQL解析:拦截和解析应用程序的SQL语句,确定目标数据源和分片规则。
路由:根据分片策略(如范围分片、哈希分片等),将SQL语句路由到相应的数据节点。
执行引擎:将路由后的SQL语句分发到各个分片进行并行执行。
结果合并:对各个分片的执行结果进行合并、排序、聚合等操作,返回给应用程序。
图片
图片
图片
图片
图片
索引:缺乏适当的索引或索引设计不当会导致全表扫描,增加查询时间。
查询设计:复杂的查询、子查询、多表连接等可能会影响性能。
表设计:表的规范化程度、数据冗余、表的大小等都可能影响性能。
硬件资源:CPU、内存、磁盘I/O等硬件资源不足会导致性能瓶颈。
并发量:高并发访问会导致资源竞争和锁等待。
网络延迟:网络传输速度慢也会影响查询性能。
图片
图片
图片
图片
图片
图片
图片
1.规范化和反规范化:
规范化:减少数据冗余,确保数据一致性。
反规范化:在查询性能优先时,适当引入冗余来减少连接操作。
2.索引设计:
创建适当的索引,尤其是主键、外键和常用查询字段的索引。
使用复合索引提高多列查询的效率。
3.表结构优化:
选择合适的数据类型,避免过大或不必要的精度。
分区表设计,适用于大数据量的表,按日期、地域等维度分区。
4.关系设计:
清晰定义外键和参照完整性,确保数据关系的正确性。
考虑表的分区、合并等操作,优化存储和查询性能。
5.事务管理:
设计良好的事务管理,确保数据一致性和并发性。
避免长事务,减少锁竞争。
6.数据库配置:
调整数据库参数,如缓存大小、连接池设置等,优化数据库性能。
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
第一范式(1NF):确保每列都是原子的,不可再分。
第二范式(2NF):消除非主属性对主键部分依赖,确保每列都依赖于整个主键。
第三范式(3NF):消除传递依赖,确保每列都直接依赖于主键。
在某些情况下,为提高查询性能,可以适当反规范化,加入冗余数据,减少复杂查询和连接操作。
外键可以确保数据完整性,但在高并发写操作中可能影响性能,需权衡使用。
对于大表,根据业务需求按时间、地域等维度进行分区或分表,提升查询效率和管理方便性。
视图可以简化复杂查询,物化视图存储查询结果,提升查询性能。
根据数据特点选择合适的数据类型,尽量使用定长字段,减少存储空间和 I/O 操作。
对频繁使用的复杂计算结果进行预计算或缓存,减少实时计算开销。
使用自增主键或 UUID 作为主键,确保唯一性和检索效率。
图片
图片
图片
图片
单列索引:针对单个字段创建索引。
复合索引:对多个字段联合创建索引,适用于多列查询。
设计索引时,包含查询中需要的所有字段,减少回表操作。
避免对相同字段或字段组合创建多个索引,以节省存储和维护成本。
对唯一值的列(如身份证号、邮箱等)使用唯一索引,提高查询效率和数据完整性。
分析常见查询语句,针对频繁使用的查询条件和排序条件创建索引。
选择性高的列(即不同值多的列)更适合作为索引字段,过滤效果更好。
定期维护索引,重建碎片化严重的索引,保持索引高效。
每张表索引数量不宜过多,以免增加插入、更新和删除操作的开销。
图片
图片
图片
图片