在phoenix上做了TPC-C测试,记录一些SQL的转换经历。
insert转换
phoenix本身是不支持insert语法的,取而代之的是upsert,关于upsert的用法官方有两种:
- upsert into table select
- upsert into table values
update转换
phoenix把insert和update统一成了upsert,这就使得原先rdbms中常用的一些写法如:
|
|
改写成
|
|
没错,从上面还可以看出,所有的upsert在phoenix中必须指明rowkey。
join转换
phoenix支持两种join,hash join和sort merge join。 但是phoenix不支持非等值join。 例如:
|
|
必须改写成
|
|
但是这样phoenix会去全表扫描bmsql_order_line表,效率低下。 但是从上面的SQL中可以看出,其实是可以直接定位到bmsql_order_line表中的具体范围的。具体如下:
|
|
分别对应如下执行计划
|
|
从上面还可以看出phoenix的join执行顺序,具体见这里