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

MySQL如何快速創(chuàng)建800w條測試數(shù)據(jù)表

 更新時間:2022年03月17日 09:39:58   作者:濤姐濤哥  
這篇文章主要介紹了MySQL如何快速創(chuàng)建800w條測試數(shù)據(jù)表,下面文章圍繞MySQL創(chuàng)建測試數(shù)據(jù)表的相關(guān)資料展開詳細內(nèi)容,具有一的的參考價值,需要的小伙伴可以參考一下

一、數(shù)據(jù)插入思路

如果一條一條插入普通表的話,效率太低下,但內(nèi)存表插入速度是很快的,可以先建立一張內(nèi)存表,插入數(shù)據(jù)后,在導入到普通表中。

1、創(chuàng)建內(nèi)存表

?View Code

2、創(chuàng)建普通表

普通表參數(shù)設置和內(nèi)存表相同,否則從內(nèi)存表往普通標導入數(shù)據(jù)會報錯。

?View Code

3、創(chuàng)建存儲函數(shù)

產(chǎn)生偽隨機碼user_id 要用到存儲函數(shù)。

?View Code

4、創(chuàng)建存儲過程

存儲過程是保存起來的可以接受和返回用戶提供的參數(shù)的Transact-SQL 語句的集合,可以創(chuàng)建一個過程供永久使用。

?View Code

 5、調(diào)用存儲過程

call 就是調(diào)用存儲過程或者函數(shù),這里調(diào)用存儲過程1000000次

CALL add_vote_memory(1000000)

6、導入數(shù)據(jù)

將內(nèi)存表中的數(shù)據(jù)導入普通表。

INSERT into vote_record SELECT * from vote_record_memory

7、內(nèi)存不足

如果報錯內(nèi)存滿了,報錯信息如下:

?CALL add_vote_memory(1000000)
> 1114 - The table 'vote_record_memory' is full
?> 時間: 74.61s

則可以使用命令查看內(nèi)存表和臨時表允許寫入的最大值:

show variables like '%%table_size%'

MySQL默認16M:

 修改默認內(nèi)存配置:

set session tmp_table_size=1024*1024*1024;?
set session max_heap_table_size=1024*1024*1024;?

配置修改后,再執(zhí)行上述調(diào)用存儲過程和數(shù)據(jù)導入步驟。

8、查看結(jié)果

查看記錄,是否有插入100W條數(shù)據(jù)。

select count(*) AS total from vote_record

9、插入800W條數(shù)據(jù)

測試插入800W條數(shù)據(jù),call 調(diào)用存儲過程800W次。

 查看結(jié)果:

 800W條測試數(shù)據(jù)插入OK,想插入多少條測試數(shù)據(jù)就調(diào)用n次存儲過程,CALL add_vote_memory(n)。

二、MySQL深度分頁

所謂的深度分頁問題,涉及到mysql分頁的原理。通常情況下,mysql的分頁是這樣寫的:

select id, user_id, vote_id, group_id from vote_record limit 200, 10

SQL意思就是從vote_reccord 表里查200到210這10條數(shù)據(jù)即【201,210】,mysql會把前210條數(shù)據(jù)都查出來,拋棄前200條,返回10條。當分頁所以深度不大的時候當然沒問題,隨著分頁的深入,sql可能會變成這樣:

select id, user_id, vote_id, group_id from vote_record limit 7999900, 10

這個時候,mysql會查出來7999920條數(shù)據(jù),拋棄前7999900條,如此大的數(shù)據(jù)量,速度一定快不起來。

那如何解決呢?一般情況下,最簡單的方式是增加一個條件,利用表的覆蓋索引來加速分頁查詢:

select id, user_id, vote_id, group_id from vote_record where id > 7999900 limit 10

我們都知道,利用了索引查詢的語句中如果只包含了那個索引列(覆蓋索引),那么這種情況會查詢很快。

因為利用索引查找有優(yōu)化算法,且數(shù)據(jù)就在查詢索引上面,不用再去找相關(guān)的數(shù)據(jù)地址了,這樣節(jié)省了很多時間。上述vote_record 表的id字段是主鍵,自然就包含了默認的主鍵索引,這樣,mysql會走主鍵索引,直接連接到7999900處,然后查出來10條數(shù)據(jù)。但是這個方式需要接口的調(diào)用方配合改造,把上次查詢出來的最大id以參數(shù)的方式傳給接口提供方,會有一定溝通成本。

1、測試深度分頁

優(yōu)化前,查詢耗時2.362s,隨著數(shù)據(jù)的增大耗時會更多,limit語句的查詢時間與起始記錄的位置成正比。

 優(yōu)化后,耗時0.012s,性能提升了196.8倍。

到此這篇關(guān)于MySQL如何快速創(chuàng)建800w條測試數(shù)據(jù)表的文章就介紹到這了,更多相關(guān)MySQL創(chuàng)建測試數(shù)據(jù)表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何實現(xiàn)mysql的遠程連接

    如何實現(xiàn)mysql的遠程連接

    這篇文章詳細介紹了mysql如何實現(xiàn)遠程連接,文中有詳細的代碼實例講解,有一定的參考價值,需要的朋友可以參考閱讀
    2023-04-04
  • MySQL刪除表數(shù)據(jù)的方法

    MySQL刪除表數(shù)據(jù)的方法

    這篇文章主要介紹了MySQL刪除表數(shù)據(jù)的方法,小編覺得還是挺不錯的,這里給大家分享一下,需要的朋友可以參考。
    2017-10-10
  • MySQL中鎖的相關(guān)問題

    MySQL中鎖的相關(guān)問題

    這篇文章主要介紹了MySQL中鎖的相關(guān)問題,本文給大家介紹了從對數(shù)據(jù)操作的粒度分 ,從對數(shù)據(jù)操作的類型分,給大家介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • 簡單談談MySQL5.7 JSON格式檢索

    簡單談談MySQL5.7 JSON格式檢索

    MySQL 5.7.7 labs版本開始InnoDB存儲引擎已經(jīng)原生支持JSON格式,該格式不是簡單的BLOB類似的替換。下面我們來詳細探討下吧
    2017-01-01
  • Mysql的基礎(chǔ)使用之MariaDB安裝方法詳解

    Mysql的基礎(chǔ)使用之MariaDB安裝方法詳解

    這篇文章主要介紹了Mysql的基礎(chǔ)使用之MariaDB安裝的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • MySQL如何使用limit獲取最后一條記錄

    MySQL如何使用limit獲取最后一條記錄

    這篇文章主要介紹了MySQL如何使用limit獲取最后一條記錄問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MySQL多表數(shù)據(jù)記錄查詢詳解

    MySQL多表數(shù)據(jù)記錄查詢詳解

    這篇文章主要為大家詳細介紹了MySQL多表數(shù)據(jù)記錄查詢操作,具有一定的實用性,感興趣的小伙伴們可以參考一下
    2016-08-08
  • mysql 8.0.11安裝教程圖文解說

    mysql 8.0.11安裝教程圖文解說

    本文通過圖文并茂的形式給大家介紹了mysql 8.0.11安裝教程,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-04-04
  • sysbench的安裝與使用 分享

    sysbench的安裝與使用 分享

    sysbench是一款開源的多線程性能測試工具,可以執(zhí)行CPU/內(nèi)存/線程/IO/數(shù)據(jù)庫等方面的性能測試。數(shù)據(jù)庫目前支持MySQL/Oracle/PostgreSQL
    2013-09-09
  • MySQL實例講解子查詢的使用

    MySQL實例講解子查詢的使用

    所謂子查詢是指在一個查詢中嵌套了其他的若干查詢,即在一個SELECT查詢語句的WHERE或FROM子句中包含另一個SELECT查詢語句,下面這篇文章主要給大家介紹了關(guān)于MySQL子查詢的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評論