欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql 8.0.18 hash join測(cè)試(推薦)

 更新時(shí)間:2019年10月25日 09:19:07   作者:zhjh256  
這篇文章給大家介紹Mysql 8.0.18 hash join測(cè)試的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼講解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

Hash Join

Hash Join 不需要任何索引來(lái)執(zhí)行,并且在大多數(shù)情況下比當(dāng)前的塊嵌套循環(huán)算法更有效。

下面通過(guò)實(shí)例代碼給大家介紹Mysql 8.0.18 hash join測(cè)試,具體內(nèi)容如下所示:

CREATE TABLE COLUMNS_hj as select * from information_schema.`COLUMNS`;
INSERT INTO COLUMNS SELECT * FROM COLUMNS; -- 最后一次插入25萬(wàn)行

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í)行計(jì)劃:

-> 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秒左右。


再來(lái)看BNL,先創(chuàng)建索引(分別優(yōu)化了,再對(duì)比效果才公平)。

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秒。可見(jiàn)hash join效果還是杠杠的。

不得不吐槽下mysql的優(yōu)化器提示,貌似HASH_JOIN/NO_HASH_JOIN都不生效。

除了hash_join外,mysql 8.0.3引入的SET_VAR優(yōu)化器提示還是很好用的,可用來(lái)設(shè)置語(yǔ)句級(jí)參數(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測(cè)試,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 一文搞懂MySQL持久化和回滾的原理

    一文搞懂MySQL持久化和回滾的原理

    本文主要介紹了MySQL持久化和回滾的原理,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • mysql中drop、truncate與delete的區(qū)別詳析

    mysql中drop、truncate與delete的區(qū)別詳析

    對(duì)于drop、truncate和delete雖然簡(jiǎn)單,但是真要使用或者面試時(shí)候問(wèn)到還是需要有一定的總結(jié),下面這篇文章主要給大家介紹了關(guān)于mysql中drop、truncate與delete區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • MySql子查詢IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn)

    MySql子查詢IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn)

    本文主要介紹了MySql子查詢IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn),詳細(xì)的介紹了為什么IN這么慢以及如何優(yōu)化,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-07-07
  • windows上的mysql服務(wù)突然消失提示10061 Unkonwn error問(wèn)題及解決方案

    windows上的mysql服務(wù)突然消失提示10061 Unkonwn error問(wèn)題及解決方案

    windows10 系統(tǒng),今天早晨系統(tǒng)自己更新了下,也沒(méi)啥問(wèn)題,突然發(fā)現(xiàn)電腦上安裝的mysql 服務(wù)沒(méi)了,經(jīng)過(guò)一系列原因分析終于找到解決方案,今天小編給大家分享mysql服務(wù)突然消失:10061 Unkonwn error解決方法,一起看看吧
    2023-07-07
  • MySQL主鍵索引和非主鍵索引的實(shí)現(xiàn)

    MySQL主鍵索引和非主鍵索引的實(shí)現(xiàn)

    本文主要介紹了MySQL主鍵索引和非主鍵索引的實(shí)現(xiàn),文中詳細(xì)的介紹了主鍵索引和非主鍵索引有不同的作用和特點(diǎn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • MySQL的主從復(fù)制步驟詳解及常見(jiàn)錯(cuò)誤解決方法

    MySQL的主從復(fù)制步驟詳解及常見(jiàn)錯(cuò)誤解決方法

    這篇文章主要介紹了MySQL的主從復(fù)制步驟詳解及常見(jiàn)錯(cuò)誤解決方法,文中主張同步時(shí)跳過(guò)臨時(shí)錯(cuò)誤,并對(duì)Slave_IO_Running: No錯(cuò)誤的解決給出了方案,需要的朋友可以參考下
    2016-02-02
  • MySQL 5.7增強(qiáng)版Semisync Replication性能優(yōu)化

    MySQL 5.7增強(qiáng)版Semisync Replication性能優(yōu)化

    這篇文章主要介紹了MySQL 5.7增強(qiáng)版Semisync Replication性能優(yōu)化,本文著重講解支持發(fā)送binlog和接受ack的異步化、支持在事務(wù)commit前等待ACK兩項(xiàng)內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • MySQL筆記之?dāng)?shù)據(jù)備份與還原的使用詳解

    MySQL筆記之?dāng)?shù)據(jù)備份與還原的使用詳解

    數(shù)據(jù)很重要,這點(diǎn)用腳趾頭想都知道,為了保證數(shù)據(jù)的安全,因此需要定期對(duì)數(shù)據(jù)備份
    2013-05-05
  • mysql 5.7.23 安裝配置方法圖文教程

    mysql 5.7.23 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.23安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • MySQL中varchar和char類型的區(qū)別

    MySQL中varchar和char類型的區(qū)別

    VARCHAR和CHAR是兩種最主要的字符串類型。那么MySQL中varchar和char類型的區(qū)別是什么,本文就具體來(lái)介紹一下,感興趣的可以了解一下
    2021-11-11

最新評(píng)論