当我VirtualBox Sandbox
使用 hive 运行查询时。我觉得Select count(*)
比.js慢太多了Select *
。
谁能解释背后发生了什么?
为什么会发生这种延迟?
select * from table
它可以是一个只有地图的工作但是
Select Count(*) from table
它可以是 Map 和 Reduce 工作
希望这可以帮助。
Hive 查询可以执行三种类型的操作。
按照最便宜和最快到更昂贵和更慢的顺序,它们在这里。
配置单元查询可以是仅元数据请求。
显示表、描述表是示例。在这些查询中,hive 进程在元数据服务器中执行查找。元数据服务器是一个 SQL 数据库,可能是 MySQL,但实际的数据库是可配置的。
蜂巢查询可以是 hdfs 获取请求。从表中选择 * 就是一个例子。在这种情况下,hive 可以通过执行 hdfs 操作来返回结果。hadoop fs -get,或多或少。
Hive 查询可以是 Map Reduce 作业。
Hive 必须将 jar 运送到 hdfs,jobtracker 将任务排队,tasktracker 执行任务,最终数据放入 hdfs 或运送到客户端。
Map Reduce 作业也有不同的可能性。
它可以是地图唯一的工作。Select * from table where id > 100 ,例如,所有这些逻辑都可以应用于映射器。
可以是 Map 和 Reduce 作业,从 table 中选择 min(id);Select * from table order by id ;
它也可以导致多次map Reduce pass,但我认为上面总结了一些行为。
这是因为数据库使用聚集的主键,因此查询单独搜索每一行的键,逐行搜索,而不是从索引中搜索。
运行optimize table
。这将确保数据页按排序顺序物理存储。可以想象,这可以加快对集群主键的范围扫描。
仅在 change_event_id 列上创建一个额外的非主索引。这将在索引页中存储该列的副本,这样扫描速度会更快。创建后,检查解释计划以确保它正在使用新索引