Rumah > Artikel > pangkalan data > Bagaimana untuk menyuntik data dummy mudah pada skala besar dalam MySQL
Pernah mendapati diri anda berada dalam situasi di mana anda memerlukan sejumlah besar data tiruan untuk ujian, tetapi tidak mahu menghabiskan berjam-jam menulis skrip atau memasukkan rekod secara manual? Atau mungkin anda ingin tahu tentang cara memanfaatkan ciri baharu dalam MySQL 8.0 untuk menyelaraskan tugas pangkalan data anda? Baiklah, anda sedang mencuba! Dalam siaran ini, kami akan meneroka cara menggunakan Ungkapan Jadual Biasa (CTE) untuk menjana dan memasukkan sejumlah besar data palsu ke dalam pangkalan data MySQL anda dengan mudah.
Bayangkan anda perlu mengisi jadual dengan sejuta nilai cincang untuk ujian beban atau penanda aras prestasi. Bunyi seperti mimpi ngeri, bukan? Tidak lagi! Dengan kemunculan CTE dalam MySQL 8.0, anda boleh mencapai ini dalam masa beberapa saat. Mari kita mendalami cara ini berfungsi dan cara anda boleh menggunakan ciri berkuasa ini untuk memudahkan keperluan penjanaan data anda.
Ungkapan Jadual Biasa (CTE), ciri baharu yang ditambah dalam MySQL 8.0, boleh digunakan untuk memasukkan sejumlah besar data tiruan ringkas dengan mudah. Contohnya, jika anda ingin memasukkan 1 juta data palsu ke dalam jadual yang dipanggil cincangan yang menyimpan nilai cincang, anda boleh mencapainya dengan langkah berikut:
Mula-mula, buat jadual:
CREATE TABLE hashes ( id INT PRIMARY KEY AUTO_INCREMENT, hash CHAR(64) );
Tetapkan pembolehubah sesi untuk membenarkan kedalaman rekursi yang lebih tinggi:
SET SESSION cte_max_recursion_depth = 1000000;
Kemudian, laksanakan CTE untuk memasukkan 1 juta baris:
INSERT INTO hashes(hash) WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cte WHERE n < 1000000 ) SELECT SHA2(n, 256) FROM cte;
Kaedah ini memanfaatkan ungkapan jadual biasa rekursif untuk menjana data tiruan.
Ungkapan Jadual Biasa (CTE) ialah set hasil sementara yang dinamakan yang boleh dirujuk dalam satu pernyataan beberapa kali. CTE amat berguna untuk memudahkan pertanyaan kompleks dan meningkatkan kebolehbacaan.
SET SESSION cte_max_recursion_depth = 1000000;
Pembolehubah sistem cte_max_recursion_depth menetapkan had atas untuk rekursi. Secara lalai, ia adalah 1000, jadi untuk mengulangi lagi, anda perlu melaraskannya. Di sini, kami tetapkan kepada 1 juta.
INSERT INTO hashes(hash) WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cte WHERE n < 1000000 ) SELECT SHA2(n, 256) FROM cte;
Mari kita pecahkan pertanyaan ini:
DENGAN REKURSIF cte (n): Ini memulakan definisi CTE. cte ialah nama set hasil sementara dan n ialah lajur.
PILIH 1: Ini ialah bahagian bukan rekursif CTE, berfungsi sebagai titik permulaan (nilai awal).
UNION SEMUA PILIH n + 1 DARI cte MANA n < 1000000: Ini ialah bahagian rekursif, yang menambah nilai n sebanyak 1 sehingga mencapai 1,000,000.
PILIH SHA2(n, 256) DARI cte: Bahagian akhir pertanyaan ini memilih cincang SHA-256 bagi setiap nilai n, menjana data tiruan untuk sisipan.
CTE secara rekursif menjana nombor daripada 1 hingga 1,000,000. Untuk setiap nombor, ia mengira cincang SHA-256 dan memasukkannya ke dalam jadual cincang. Pendekatan ini cekap dan memanfaatkan keupayaan rekursif MySQL untuk mengendalikan volum data yang besar dengan lancar.
Untuk memahami kesan ciri ini, saya menggunakan ruang kerja Gitpod Enterprise, memanfaatkan persekitaran yang berkuasa dan tidak kekal untuk mengelakkan kerumitan persediaan dan pemasangan. Berikut ialah imbasan pada persediaan:
Untuk 1 juta baris, masa pelaksanaan pertanyaan adalah lebih kurang 4.46 saat:
mysql> INSERT INTO hashes(hash) -> WITH RECURSIVE cte (n) AS -> ( -> SELECT 1 -> UNION ALL -> SELECT n + 1 FROM cte WHERE n < 1000000 -> ) -> SELECT SHA2(n, 256) FROM cte; Query OK, 1000000 rows affected (4.43 sec) Records: 1000000 Duplicates: 0 Warnings: 0
Number of Rows | Execution Time |
---|---|
1,000 | 0.03 sec |
10,000 | 0.07 sec |
100,000 | 0.42 sec |
1,000,000 | 4.43 sec |
10,000,000 | 48.53 sec |
Menggunakan CTE dalam MySQL 8.0 ialah penukar permainan untuk menjana sejumlah besar data palsu dengan cepat. Ia amat berguna untuk ujian beban dan penanda aras prestasi. Dengan hanya beberapa baris kod, anda boleh mengisi jadual anda dengan mudah dan kemudian kembali ke bahagian penting projek anda yang lain.
Jangan teragak-agak untuk bermain-main dengan strategi penjanaan data yang berbeza dan kedalaman rekursi untuk melihat perkara yang paling sesuai untuk anda. Untuk mendapatkan lebih banyak petua dan pandangan tentang keselamatan dan analisis log, ikuti saya di Twitter @Siddhant_K_code dan kekal kemas kini dengan kandungan teknologi terkini & terperinci seperti ini. Selamat mengekod!
Atas ialah kandungan terperinci Bagaimana untuk menyuntik data dummy mudah pada skala besar dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!