国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql 8.0.18 hash join測試(推薦)

2020-01-18 20:40:33
字體:
來源:轉載
供稿:網友

Hash Join

Hash Join 不需要任何索引來執行,并且在大多數情況下比當前的塊嵌套循環算法更有效。

下面通過實例代碼給大家介紹Mysql 8.0.18 hash join測試,具體內容如下所示:

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=treeSELECT  COUNT(c1. PRIVILEGES), SUM(c1.ordinal_position)FROM COLUMNS_hj c1, COLUMNS_hj2 c2WHERE c1.table_name = c2.table_nameAND c1.column_name = c2.column_nameGROUP BY c1.table_name, c1.column_nameORDER BY c1.table_name, c1.column_name;

必須使用format=tree(8.0.16的新特性)才能查看hash join的執行計劃:

-> 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 c2WHERE c1.table_name = c2.table_nameAND c1.column_name = c2.column_nameGROUP BY c1.table_name, c1.column_nameORDER BY c1.table_name, c1.column_name;

1.5秒左右。


再來看BNL,先創建索引(分別優化了,再對比效果才公平)。

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的優化器提示,貌似HASH_JOIN/NO_HASH_JOIN都不生效。

除了hash_join外,mysql 8.0.3引入的SET_VAR優化器提示還是很好用的,可用來設置語句級參數(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_incrementauto_increment_offsetbig_tablesbulk_insert_buffer_sizedefault_tmp_storage_enginediv_precision_incrementend_markers_in_jsoneq_range_index_dive_limitforeign_key_checksgroup_concat_max_leninsert_idinternal_tmp_mem_storage_enginejoin_buffer_sizelock_wait_timeoutmax_error_countmax_execution_timemax_heap_table_sizemax_join_sizemax_length_for_sort_datamax_points_in_geometrymax_seeks_for_keymax_sort_lengthoptimizer_prune_leveloptimizer_search_depth variablesoptimizer_switchrange_alloc_block_sizerange_optimizer_max_mem_sizeread_buffer_sizeread_rnd_buffer_sizesort_buffer_sizesql_auto_is_nullsql_big_selectssql_buffer_resultsql_modesql_safe_updatessql_select_limittimestamptmp_table_sizeupdatable_views_with_limitunique_checkswindowing_use_high_precision

總結

以上所述是小編給大家介紹的Mysql 8.0.18 hash join測試,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 游戏| 临安市| 安泽县| 防城港市| 特克斯县| 枞阳县| 南开区| 正镶白旗| 布尔津县| 宜君县| 航空| 阿图什市| 宁远县| 海口市| 华安县| 谷城县| 杭州市| 乌鲁木齐市| 吕梁市| 焦作市| 吐鲁番市| 彝良县| 台州市| 广南县| 保亭| 博湖县| 屏南县| 浮梁县| 塔河县| 惠州市| 古丈县| 凌海市| 运城市| 原平市| 丹江口市| 九台市| 醴陵市| 黄冈市| 武汉市| 乳山市| 大理市|