Get the App
SLTechnology News&Howtos  ›  Database  › 

Multi-table Association query optimized by SQL-case 1

Shulou Source: shulou.com Published: 2022-06-01 06:55:00 10月15日 Update

You can see an associated query with three tables in the slow SQL log, as follows:

SELECT COUNT (1) FROM refund_order_item I, artisan a, user u WHERE u.userid = i.user_id AND a.artisan_id = i.artisan_id

Test query time:

Mysql > SELECT COUNT (1)-> FROM refund_order_item I, artisan a, user u-> WHERE u.userid = i.user_id-> AND a.artisan_id = i.artisanSecretiditarianism sec + | COUNT (1) | +-+ | 260605 | +-+ 1 row in set (2.30 sec)

View the execution plan:

Mysql > explain SELECT COUNT (1)-> FROM refund_order_item I, artisan a, user u-> WHERE u.userid = i.user_id-> AND a.artisan_id = i.artisan_id +- -+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra | + -+-+-- + | 1 | SIMPLE | I | NULL | ALL | idx_user_id Idx_artisan_id | NULL | 255599 | 100.00 | NULL | | 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | hlj.i.artisan_id | 1 | 100.00 | Using index | | 1 | SIMPLE | u | NULL | eq_ref | userid | | userid | 122 | hlj.i.user_id | 1 | 100.00 | Using index | +-| -- +

You can see that the refund_order_item table is not indexed.

Create a federated index:

ALTER TABLE refund_order_item ADD INDEX idx_aid_uid (artisan_id, user_id)

View the execution plan:

Explain SELECT COUNT (1) FROM refund_order_item I, artisan a, user u WHERE u.userid = i.user_id AND a.artisan_id = i.artisan_id +- -+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +- -+ -+ | 1 | SIMPLE | I | NULL | index | idx_user_id Idx_artisan_id Idx_aid_uid | idx_aid_uid | 244 | NULL | 255599 | 100.00 | Using index | | 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | 122 | hlj.i.artisan_id | 1 | 100.00 | Using index | | 1 | SIMPLE | u | NULL | eq _ ref | userid | userid | 122 | hlj.i.user_id | 1 | 100.00 | Using index | + -- +

You can see that the execution plan has been indexed.

Test query time:

Mysql > SELECT COUNT (1)-> FROM refund_order_item I, artisan a, user u-> WHERE u.userid = i.user_id-> AND a.artisan_id = i.artisanonymidity.quli + | COUNT (1) | +-+ | 260605 | +-+ 1 row in set (1.15 sec)

Tags: Query index time test association log federation case Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Apple Shulou Technology OPPO Reno Redmi vpn