Adaptive Join Order Selection for Continuous Queries.
Xinyi Ye, Xiangyang Gou, Lei Zou, and Wenjie Zhang. 2025. AJOSC: Adaptive Join Order Selection for Continuous Queries. Proc. ACM Manag. Data 3, 3 (SIGMOD), Article 126 (June 2025), 27 pages. https://doi.org/10.1145/3725263
Please cite our paper, if you use our source code.
@article{ajosc_2025,
title = {{AJOSC}: {Adaptive} {Join} {Order} {Selection} for {Continuous} {Queries}},
volume = {3},
shorttitle = {{AJOSC}},
url = {https://dl.acm.org/doi/10.1145/3725263},
doi = {10.1145/3725263},
number = {3},
urldate = {2026-02-07},
journal = {Proc. ACM Manag. Data},
author = {Ye, Xinyi and Gou, Xiangyang and Zou, Lei and Zhang, Wenjie},
month = jun,
year = {2025},
pages = {126:1--126:27},
}
mkdir build
cd build
cmake ..
make -j
./ours ${schema_filename} ${query_filename} ${static_stream_filename} ${dynamic_stream_filename} ${primary_key_filename} -l ${#updates_handled_before_start_compute_order_using_AJOSC}
The first 5 parameters are file names; the last parameter is an integer.
The schema file contains multiple lines, where every line contains the attribute list of a table.
${table_name} ${attribute_num} ${list of attributes}
For example,
complete_cast 4 id movie_id subject_id status_id
The query file is composed of 3 parts. The first part contains two lines.
${the number of tables in the query}
${list of tables}
The second part contains ${|V|} in this part might be larger than ${the number of tables in the query} in the first part.
${|V|}
0 ${table name}
1 ${table name}
...
The third part contains join conditions. Every line is a join condition. Every line looks like
${T1.id} ${attribute1} ${T2.id} ${attribute2}, which means
For example,
5
movie_info_idx company_type title info_type movie_companies
5
0 movie_info_idx
1 title
2 movie_companies
3 company_type
4 info_type
3 id 2 company_type_id
1 id 2 movie_id
1 id 0 movie_id
2 movie_id 0 movie_id
4 id 0 info_type_id
Multiple lines. Every line is an update operation:
${1 means insert, 0 means delete} ${table_name} ${attribute values}
For example,
1 cast_info 30848237,528031,1677244,,,,9,
The primary key file contains multiple lines. Every line shows the primary key of a table. Every line looks like
${table_name} ${# attributes in the primary key} ${attribute list}
For example,
comp_cast_type 1 id
JOB. https://github.com/gregrahn/join-order-benchmark