+++
pre = "<b>3.1.2. </b>"
title = "内核剖析"
weight = 2
chapter = true
+++

ShardingSphere 的 3 个产品的数据分片主要流程是完全一致的。
核心由 `SQL 解析 => 执行器优化 => SQL 路由 => SQL 改写 => SQL 执行 => 结果归并`的流程组成。

![分片架构图](https://shardingsphere.apache.org/document/current/img/sharding/sharding_architecture_cn.png)

## SQL 解析

分为词法解析和语法解析。
先通过词法解析器将 SQL 拆分为一个个不可再分的单词。再使用语法解析器对 SQL 进行理解，并最终提炼出解析上下文。
解析上下文包括表、选择项、排序项、分组项、聚合函数、分页信息、查询条件以及可能需要修改的占位符的标记。

## 执行器优化

合并和优化分片条件，如 OR 等。

## SQL 路由

根据解析上下文匹配用户配置的分片策略，并生成路由路径。目前支持分片路由和广播路由。

## SQL 改写

将 SQL 改写为在真实数据库中可以正确执行的语句。SQL 改写分为正确性改写和优化改写。

## SQL 执行

通过多线程执行器异步执行。

## 结果归并

将多个执行结果集归并以便于通过统一的 JDBC 接口输出。结果归并包括流式归并、内存归并和使用装饰者模式的追加归并这几种方式。
