新聞中心
COUNT 算子用于兼容 Oracle 的 ROWNUM 功能,實(shí)現(xiàn) ROWNUM 表達(dá)式的自增操作。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、阿巴嘎網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)、阿巴嘎網(wǎng)絡(luò)營(yíng)銷、阿巴嘎企業(yè)策劃、阿巴嘎品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供阿巴嘎建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
在一般場(chǎng)景下,當(dāng) SQL 查詢含有 ROWNUM 時(shí),SQL 優(yōu)化器就會(huì)在生成執(zhí)行計(jì)劃的時(shí)候分配一個(gè) COUNT 算子。當(dāng)然在一些情況下,SQL 優(yōu)化器會(huì)將含有 ROWNUM 的 SQL 改寫(xiě)為 LIMIT 算子,這時(shí)就不會(huì)再分配 COUNT 算子。
正常分配 COUNT 算子的場(chǎng)景
示例 1:含有 ROWNUM 的 SQL 查詢正常分配 COUNT 算子場(chǎng)景。
obclient>CREATE TABLE t1(c1 INT, c2 INT);
Query OK, 0 rows affected (0.12 sec)
obclient>INSERT INTO t1 VALUES(1, 1);
Query OK, 1 rows affected (0.12 sec)
obclient>INSERT INTO t1 VALUES(3, 3);
Query OK, 1 rows affected (0.12 sec)
obclient>INSERT INTO t1 VALUES(5, 5);
Query OK, 1 rows affected (0.12 sec)
Q1:
obclient>EXPLAIN SELECT c1,ROWNUM FROM t1\G;
*************************** 1. row ***************************
Query Plan:
| ====================================
|ID|OPERATOR |NAME|EST. ROWS|COST|
------------------------------------
|0 |COUNT | |1 |37 |
|1 | TABLE SCAN|T1 |1 |36 |
====================================
Outputs & filters:
-------------------------------------
0 - output([T1.C1], [rownum()]), filter(nil)
1 - output([T1.C1]), filter(nil),
access([T1.C1]), partitions(p0)
obclient>SELECT c1,ROWNUM FROM t1;
+------+--------+
| C1 | ROWNUM |
+------+--------+
| 1 | 1 |
| 3 | 2 |
| 5 | 3 |
+------+--------+
3 rows in set (0.01 sec)上述示例中,執(zhí)行計(jì)劃展示中的 outputs & filters 詳細(xì)展示了 COUNT 算子的輸出信息如下:
|
信息名稱 |
含義 |
|---|---|
output | 該算子輸出的表達(dá)式。 其中 rownum() 表示 ROWNUM 對(duì)應(yīng)的表達(dá)式。 |
filter | 該算子上的過(guò)濾條件。 由于示例中 COUNT 算子沒(méi)有設(shè)置 filter,所以為 nil。 |
從上述執(zhí)行計(jì)劃示例的輸出結(jié)果可以發(fā)現(xiàn),ROWNUM 對(duì)應(yīng)的表達(dá)式的初始值為 1,每通過(guò)一次 COUNT 算子,COUNT 算子就會(huì)為 ROWNUM 對(duì)應(yīng)的表達(dá)式的值加上 1,實(shí)現(xiàn) ROWNUM 表達(dá)式的自增操作。
不分配 COUNT 算子的場(chǎng)景
示例 2:含有 rownum 的 SQL 改寫(xiě)為 LIMIT 后,不分配 COUNT 算子的場(chǎng)景。
Q2:
obclient>EXPLAIN SELECT 1 FROM DUAL WHERE ROWNUM < 2\G;
*************************** 1. row ***************************
Query Plan:
| ====================================
|ID|OPERATOR |NAME|EST. ROWS|COST|
------------------------------------
|0 |LIMIT | |1 |1 |
|1 | EXPRESSION| |1 |1 |
====================================
Outputs & filters:
-------------------------------------
0 - output([1]), filter(nil), limit(?), offset(nil)
1 - output([1]), filter(nil)
values({1})從上述執(zhí)行計(jì)劃示例的輸出結(jié)果可以發(fā)現(xiàn),雖然 SQL 中含有 ROWNUM,但是經(jīng)過(guò) SQL 優(yōu)化器改寫(xiě)之后,已經(jīng)將涉及含有 ROWNUM 的表達(dá)式轉(zhuǎn)換為了等價(jià)的 LIMIT 表達(dá)式,轉(zhuǎn)換的好處在于可以做更多的優(yōu)化,詳細(xì)信息請(qǐng)參見(jiàn) LIMIT。
文章題目:創(chuàng)新互聯(lián)OceanBase教程:OceanBaseCOUNT
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/dpodddd.html


咨詢
建站咨詢
