Mysql 8.0.18 hash join測試(推薦)
Hash Join
Hash Join 不需要任何索引來執(zhí)行,并且在大多數(shù)情況下比當(dāng)前的塊嵌套循環(huán)算法更有效。
下面通過實例代碼給大家介紹Mysql 8.0.18 hash join測試,具體內(nèi)容如下所示:
CREATE TABLE COLUMNS_hj as select * from information_schema.`COLUMNS`; INSERT INTO COLUMNS SELECT * FROM COLUMNS; -- 最后一次插入25萬行 CREATE TABLE COLUMNS_hj2 as select * from information_schema.`COLUMNS`;
explain format=tree SELECT COUNT(c1. PRIVILEGES), SUM(c1.ordinal_position) FROM COLUMNS_hj c1, COLUMNS_hj2 c2 WHERE c1.table_name = c2.table_name AND c1.column_name = c2.column_name GROUP BY c1.table_name, c1.column_name ORDER BY c1.table_name, c1.column_name;
必須使用format=tree(8.0.16的新特性)才能查看hash join的執(zhí)行計劃:
-> Sort: <temporary>.TABLE_NAME, <temporary>.COLUMN_NAME -> Table scan on <temporary> -> Aggregate using temporary table -> Inner hash join (c1.`COLUMN_NAME` = c2.`COLUMN_NAME`), (c1.`TABLE_NAME` = c2.`TABLE_NAME`) (cost=134217298.97 rows=13421218) -> Table scan on c1 (cost=1.60 rows=414619) -> Hash -> Table scan on c2 (cost=347.95 rows=3237)
set join_buffer_size=1048576000; SELECT COUNT(c1. PRIVILEGES), SUM(c1.ordinal_position) FROM COLUMNS_hj c1, COLUMNS_hj2 c2 WHERE c1.table_name = c2.table_name AND c1.column_name = c2.column_name GROUP BY c1.table_name, c1.column_name ORDER BY c1.table_name, c1.column_name;
1.5秒左右。
再來看BNL,先創(chuàng)建索引(分別優(yōu)化了,再對比效果才公平)。
alter table columns_hj drop index idx_columns_hj; alter table columns_hj2 drop index idx_columns_hj2; create index idx_columns_hj on columns_hj(table_name,column_name); create index idx_columns_hj2 on columns_hj2(table_name,column_name); -> Sort: <temporary>.TABLE_NAME, <temporary>.COLUMN_NAME -> Table scan on <temporary> -> Aggregate using temporary table -> Nested loop inner join (cost=454325.17 rows=412707) -> Filter: ((c2.`TABLE_NAME` is not null) and (c2.`COLUMN_NAME` is not null)) (cost=347.95 rows=3237) -> Table scan on c2 (cost=347.95 rows=3237) -> Index lookup on c1 using idx_COLUMNS_hj (TABLE_NAME=c2.`TABLE_NAME`, COLUMN_NAME=c2.`COLUMN_NAME`) (cost=127.50 rows=127)
大約4.5秒??梢奾ash join效果還是杠杠的。
不得不吐槽下mysql的優(yōu)化器提示,貌似HASH_JOIN/NO_HASH_JOIN都不生效。
除了hash_join外,mysql 8.0.3引入的SET_VAR優(yōu)化器提示還是很好用的,可用來設(shè)置語句級參數(shù)(oracle支持,mariadb記得也支持了的),如下:
mysql> select /*+ set_var(optimizer_switch='index_merge=off') set_var(join_buffer_size=4M) */ c_id from customer limit 1;
SET_VAR支持的變量列表:
auto_increment_increment auto_increment_offset big_tables bulk_insert_buffer_size default_tmp_storage_engine div_precision_increment end_markers_in_json eq_range_index_dive_limit foreign_key_checks group_concat_max_len insert_id internal_tmp_mem_storage_engine join_buffer_size lock_wait_timeout max_error_count max_execution_time max_heap_table_size max_join_size max_length_for_sort_data max_points_in_geometry max_seeks_for_key max_sort_length optimizer_prune_level optimizer_search_depth variables optimizer_switch range_alloc_block_size range_optimizer_max_mem_size read_buffer_size read_rnd_buffer_size sort_buffer_size sql_auto_is_null sql_big_selects sql_buffer_result sql_mode sql_safe_updates sql_select_limit timestamp tmp_table_size updatable_views_with_limit unique_checks windowing_use_high_precision
總結(jié)
以上所述是小編給大家介紹的Mysql 8.0.18 hash join測試,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
mysql中drop、truncate與delete的區(qū)別詳析
對于drop、truncate和delete雖然簡單,但是真要使用或者面試時候問到還是需要有一定的總結(jié),下面這篇文章主要給大家介紹了關(guān)于mysql中drop、truncate與delete區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-03-03MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)
本文主要介紹了MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn),詳細(xì)的介紹了為什么IN這么慢以及如何優(yōu)化,具有一定的參考價值,感興趣的可以了解一下2021-07-07windows上的mysql服務(wù)突然消失提示10061 Unkonwn error問題及解決方案
windows10 系統(tǒng),今天早晨系統(tǒng)自己更新了下,也沒啥問題,突然發(fā)現(xiàn)電腦上安裝的mysql 服務(wù)沒了,經(jīng)過一系列原因分析終于找到解決方案,今天小編給大家分享mysql服務(wù)突然消失:10061 Unkonwn error解決方法,一起看看吧2023-07-07MySQL 5.7增強(qiáng)版Semisync Replication性能優(yōu)化
這篇文章主要介紹了MySQL 5.7增強(qiáng)版Semisync Replication性能優(yōu)化,本文著重講解支持發(fā)送binlog和接受ack的異步化、支持在事務(wù)commit前等待ACK兩項內(nèi)容,需要的朋友可以參考下2015-05-05MySQL筆記之?dāng)?shù)據(jù)備份與還原的使用詳解
數(shù)據(jù)很重要,這點(diǎn)用腳趾頭想都知道,為了保證數(shù)據(jù)的安全,因此需要定期對數(shù)據(jù)備份2013-05-05