在重写这一步,我们拿到了查询SQL的内部表示,重写的目的是: 预优化SQL 避免不必要的操作 帮助优化器找到尽可能好的解决方案 重写器会在查询上匹配一系列规则,如果匹配一个规则就应用它重写查询,以下是部分可选的规则: 视图合并:如果你在查询中用了视图
在重写这一步,我们拿到了查询SQL的内部表示,重写的目的是:
重写器会在查询上匹配一系列规则,如果匹配一个规则就应用它重写查询,以下是部分可选的规则:
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">SELECT</span> PERSON.* <span class="hljs-keyword">FROM</span> PERSON <span class="hljs-keyword">WHERE</span> PERSON.person_key <span class="hljs-keyword">IN</span> (<span class="hljs-keyword">SELECT</span> MAILS.person_key <span class="hljs-keyword">FROM</span> MAILS <span class="hljs-keyword">WHERE</span> MAILS.mail <span class="hljs-keyword">LIKE</span> <span class="hljs-string">'christophe%'</span>);</span></code>
会被重写器转换为:
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">SELECT</span> PERSON.* <span class="hljs-keyword">FROM</span> PERSON, MAILS <span class="hljs-keyword">WHERE</span> PERSON.person_key = MAILS.person_key <span class="hljs-keyword">and</span> MAILS.mail <span class="hljs-keyword">LIKE</span> <span class="hljs-string">'christophe%'</span>;</span></code>
重写后的查询会被转发给优化器继续处理。