当前位置: 首页 > news >正文

怎么创网站做石膏选图形的网站

怎么创网站,做石膏选图形的网站,seo+网站排名,移动端app界面设计ClickHouse 的 SQL 优化规则是基于RBO(Rule Based Optimization),下面是一些优化规则 1 准备测试用表 1)上传官方的数据集 将visits_v1.tar和hits_v1.tar上传到虚拟机,解压到clickhouse数据路径下 // 解压到clickhouse数据路径 sudo tar -xvf…

ClickHouse 的 SQL 优化规则是基于RBO(Rule Based Optimization),下面是一些优化规则

准备测试用表

1上传官方的数据集

visits_v1.tarhits_v1.tar上传到虚拟机,解压到clickhouse数据路径下

// 解压到clickhouse数据路径

sudo tar -xvf hits_v1.tar -C /var/lib/clickhouse
sudo tar -xvf visits_v1.tar -C /var/lib/clickhouse//修改所属用户
sudo chown -R clickhouse:clickhouse /var/lib/clickhouse/data/datasets
sudo chown -R clickhouse:clickhouse /var/lib/clickhouse/metadata/datasets

2重启clickhouse-server

sudo clickhouse restart

3执行查询

clickhouse-client --query "SELECT COUNT(*) FROM datasets.hits_v1"

clickhouse-client --query "SELECT COUNT(*) FROM datasets.visits_v1"

注意:官方的tar包,包含了建库、建表语句、数据内容,这种方式不需要手动建库、建表,最方便。

hits_v1表有130多个字段,880多万条数据

visits_v1表有180多个字段,160多万条数据

COUNT 优化

在调用 count 函数时如果使用的是 count() 或者 count(*),且没有 where 条件则会直接使用 system.tables  total_rows,例如:

EXPLAIN SELECT count()FROM datasets.hits_v1;Union
  Expression (Projection)
    Expression (Before ORDER BY and SELECT)
      MergingAggregated
        ReadNothing (Optimized trivial count)

注意 Optimized trivial count ,这是对 count 的优化。

如果 count 具体的列字段,则不会使用此项优化:

EXPLAIN SELECT count(CounterID) FROM datasets.hits_v1;Union
  Expression (Projection)
    Expression (Before ORDER BY and SELECT)
      Aggregating
        Expression (Before GROUP BY)
          ReadFromStorage (Read from MergeTree)

消除子查询重复字段

下面语句子查询中有两个重复的 id 字段会被去重:

EXPLAIN SYNTAX SELECT 
   a.UserID,
   b.VisitID,
   a.URL,
   b.UserID
   FROM
   hits_v1 AS a 
   LEFT JOIN ( 
    SELECT       
      UserID,        
      UserID as HaHa,       
      VisitID   
    FROM visits_v1) AS b 
   USING (UserID)
   limit 3;//返回优化语句:
SELECT 
    UserID,
    VisitID,
    URL,
    b.UserID
FROM hits_v1 AS a
ALL LEFT JOIN 
(
    SELECT 
        UserID,
        VisitID
    FROM visits_v1
) AS b USING (UserID)
LIMIT 3

4 谓词下推

当group by有having子句,但是没有with cube、with rollup 或者with totals修饰的时候,having过滤会下推到where提前过滤。例如下面的查询,HAVING name变成了WHERE name,在group by之前过滤:

EXPLAIN SYNTAX SELECT UserID FROM hits_v1 GROUP BY UserID HAVING UserID = '8585742290196126178';//返回优化语句
SELECT UserID
FROM hits_v1
WHERE UserID = \'8585742290196126178\'
GROUP BY UserID

子查询也支持谓词下推:

EXPLAIN SYNTAX
SELECT *
FROM 
(
    SELECT UserID
    FROM visits_v1
)
WHERE UserID = '8585742290196126178'//返回优化后的语句
SELECT UserID
FROM 
(
    SELECT UserID
    FROM visits_v1
    WHERE UserID = \'8585742290196126178\'
)
WHERE UserID = \'8585742290196126178\'

再来一个复杂例子:

//返回优化后的语句
SELECT UserID
FROM 
(
    SELECT UserID
    FROM (
        SELECT UserID
        FROM visits_v1
        WHERE UserID = \'8585742290196126178\')
    WHERE UserID = \'8585742290196126178\'
    UNION ALL
    SELECT UserID
    FROM (
        SELECT UserID
        FROM visits_v1
        WHERE UserID = \'8585742290196126178\')
    WHERE UserID = \'8585742290196126178\'
)
WHERE UserID = \'8585742290196126178\'

5 聚合计算外推

聚合函数内的计算会外推例如

EXPLAIN SYNTAX
SELECT sum(UserID * 2)
FROM visits_v1//返回优化后的语句
SELECT sum(UserID) * 2
FROM visits_v1

6 聚合函数消除

如果对聚合键,也就是 group by key 使用 min、max、any 聚合函数,则将函数消除,例如:

EXPLAIN SYNTAX
SELECTsum(UserID * 2),max(VisitID),max(UserID)
FROM visits_v1
GROUP BY UserID//返回优化后的语句
SELECT sum(UserID) * 2,max(VisitID),
    UserID
FROM visits_v1
GROUP BY UserID

7 删除重复的 order by key

例如下面的语句,重复的聚合键 id 字段会被去重:

EXPLAIN SYNTAX
SELECT *
FROM visits_v1
ORDER BY
    UserID ASC,
    UserID ASC,
    VisitID ASC,
VisitID ASC//返回优化后的语句:
select
	……
FROM visits_v1
ORDER BY 
    UserID ASC,
VisitID ASC

删除重复的 limit by key

例如下面的语句重复声明的 name 字段会被去重

EXPLAIN SYNTAX
SELECT *
FROM visits_v1
LIMIT 3 BY
    VisitID,
    VisitID
LIMIT 10//返回优化后的语句:
select
	……
FROM visits_v1
LIMIT 3 BY VisitID
LIMIT 10

删除重复的 USING Key

例如下面的语句,重复的关联键 id 字段会被去重:

EXPLAIN SYNTAX
SELECT
    a.UserID,
    a.UserID,
    b.VisitID,
    a.URL,
    b.UserID
FROM hits_v1 AS a
LEFT JOIN visits_v1 AS b USING (UserID, UserID)//返回优化后的语句:
SELECT 
    UserID,
    UserID,
    VisitID,
    URL,
    b.UserID
FROM hits_v1 AS a
ALL LEFT JOIN visits_v1 AS b USING (UserID)

10 标量替换

如果子查询只返回一行数据在被引用的时候用标量替换例如下面语句中的 total_disk_usage 字段

EXPLAIN SYNTAX
WITH (
        SELECT sum(bytes)
        FROM system.parts
        WHERE active) AS total_disk_usage
SELECT(sum(bytes) / total_disk_usage) * 100 AS table_disk_usage,
    table
FROM system.parts
GROUP BY table
ORDER BY table_disk_usage DESC
LIMIT 10;//返回优化后的语句:
WITH CAST(0, \'UInt64\') AS total_disk_usage
SELECT (sum(bytes) / total_disk_usage) * 100 AS table_disk_usage,
    table
FROM system.parts
GROUP BY table
ORDER BY table_disk_usage DESC
LIMIT 10

11 三元运算优化

如果开启了 optimize_if_chain_to_multiif 参数,三元运算符会被替换成 multiIf 函数,例如:

EXPLAIN SYNTAX 
SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') 
FROM numbers(10) 
settings optimize_if_chain_to_multiif = 1;// 返回优化后的语句:
SELECT multiIf(number = 1, \'hello\', number = 2, \'world\', \'atguigu\')
FROM numbers(10)
SETTINGS optimize_if_chain_to_multiif = 1

http://www.yayakq.cn/news/295431/

相关文章:

  • 移动网站如何做权重平面设计主要做什么工资多少
  • 天津网站优贵州省住房和城乡建设厅网站(
  • 地方门户网站搭建系统种子搜索网站怎么做的
  • 住房城市建设网站海外购物网站建设
  • 曲靖网站建设青岛seo全网营销
  • 广告公司主要做什么晨阳seo服务
  • 海口北京网站建设网站建设丨找王科杰效果好
  • 用wordpress做答题网站seo的优化策略有哪些
  • 西安知名网站制作公司做简历的什么客网站
  • 家居设计seo技术秋蝉
  • 义乌网站建设推广兰州落地防疫
  • 天猫入驻网站建设互联网建设网站
  • 贵阳网站开发培训卖商标的上哪个平台
  • 万网如何购买网站空间陕西电商网站建设
  • 泊头市做网站价格家用电脑进行网站建设
  • 天津圣辉友联做网站网站建站建设公司
  • 网站建设交流发言材料新昌网站建设
  • 网站定位方案37玩手游官网平台
  • 芒市网站建设做百度网站需不需要备案
  • 做博客网站赚钱吗网站建设摘要
  • 网站推广引流最快方法wordpress 切换
  • 网站模版化配置国外域名查询网站
  • wordpress网站的优化无锡网站建设方案服务
  • 专门做餐饮ppt的网站博物馆门户网站建设
  • 网站维护年费东莞网站排名优化价格
  • 泉州市建设系统培训中心网站网站外链建设可以提升网站权重吗
  • 网站建设销售技巧和话术正规不收费的网站
  • 如何建网站做传奇网友浙江新东阳建设集团有限公司网站
  • 石家庄制作网站的公司信得过的网站开发推广
  • 网站建设流量入口公司网站建设一般多少钱