Rumah pangkalan data tutorial mysql Bagaimana untuk Mengoptimumkan Pertanyaan SQL untuk Jadual dengan Nilai Dipisahkan Koma?

Bagaimana untuk Mengoptimumkan Pertanyaan SQL untuk Jadual dengan Nilai Dipisahkan Koma?

Dec 18, 2024 am 12:24 AM

How to Optimize SQL Queries for Tables with Comma-Separated Values?

Mengoptimumkan Pertanyaan SQL untuk Jadual dengan Nilai Lajur Dipisahkan Koma

Apabila berurusan dengan jadual di mana lajur mengandungi nilai dipisahkan koma, melaksanakan khusus pertanyaan boleh mencabar. Senario biasa ialah mendapatkan semula semua data yang berkaitan apabila mencari nilai tertentu dalam lajur yang dipisahkan koma.

Isu:

Anda perlu mendapatkan semula semua nama pengguna yang dikaitkan dengan tertentu nilai dalam lajur yang dipisahkan koma. Sebagai contoh, daripada struktur jadual di bawah, anda ingin mencari semua nama pengguna apabila anda mencari "new1."

Jadual:

CREATE TABLE tblA
(
id int NOT NULL AUTO_INCREMENT ,
user varchar(255),
category int(255),
PRIMARY KEY (id)
);

CREATE TABLE tblB
(
id int NOT NULL AUTO_INCREMENT ,
username varchar(255),
userid int(255),
PRIMARY KEY (id)
);

CREATE TABLE tblC
(
id int NOT NULL AUTO_INCREMENT ,
nname varchar(255),
userids varchar(255),
PRIMARY KEY (id)
);

INSERT INTO tblA (user, category ) VALUES
('1', '1'),
('1', '2'),
('1', '3'),
('1', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('3', '1'),
('2', '1'),
('4', '1'),
('4', '1'),
('2', '1');


INSERT INTO tblB (userid, username ) VALUES
('1', 'A'),
('2', 'B'),
('3', 'C'),
('4', 'D'),
('5', 'E');


INSERT INTO tblC (id, nname,userids ) VALUES
('1', 'new1','1,2'),
('2', 'new2','1,3'),
('3', 'new3','1,4'),
('4', 'new4','3,2'),
('5', 'new5','5,2');
Salin selepas log masuk

Pertanyaan:

select * where nname="new1" from  tblC
CROSS JOIN tblB
ON tblB.userid=(SELECT userids FROM substr(tblC.userids,','))
Salin selepas log masuk

Batasan:

Pertanyaan ini bergantung pada Fungsi SUBSTR dan FIND_IN_SET, yang boleh menjadi tidak cekap untuk set data yang besar. Selain itu, ia menganggap hanya satu nilai dipisahkan koma bagi setiap baris, yang mungkin tidak selalu berlaku.

Penyelesaian Disyorkan:

Penormalan Pangkalan Data:

Normalkan skema pangkalan data anda dengan mencipta jadual berasingan untuk dipisahkan koma nilai. Ini menghapuskan ketidakcekapan mencari melalui rentetan dan memudahkan pertanyaan.

Skema Contoh:

CREATE TABLE tblC (
id int NOT NULL AUTO_INCREMENT ,
nname varchar(255),
PRIMARY KEY (id)
);

CREATE TABLE tblC_user (
c_id int NOT NULL,
userid int NOT NULL
);

INSERT INTO tblC (id, nname) VALUES
('1', 'new1'),
('2', 'new2'),
('3', 'new3'),
('4', 'new4'),
('5', 'new5');

INSERT INTO tblC_user (c_id, userid) VALUES
('1','1'),
('1','2'),
('2','1'),
('2','3'),
('3','1'),
('3','4'),
('4','3'),
('4','2'),
('5','5'),
('5','2');
Salin selepas log masuk

Dioptimumkan Pertanyaan:

select *
from tblC c
join tblC_user cu on(c.id = cu.c_id)
join tblB b on (b.userid = cu.userid)
where c.nname="new1"
Salin selepas log masuk

Faedah:

  • Peningkatan prestasi disebabkan operasi gabungan yang cekap
  • Mengurangkan kerumitan dengan menghapuskan manipulasi rentetan fungsi
  • Kebolehselenggaraan dan fleksibiliti dalam menampung masa hadapan perubahan pada struktur data

Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Pertanyaan SQL untuk Jadual dengan Nilai Dipisahkan Koma?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kurangkan penggunaan memori MySQL di Docker Kurangkan penggunaan memori MySQL di Docker Mar 04, 2025 pm 03:52 PM

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Mar 19, 2025 pm 03:51 PM

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Mar 04, 2025 pm 04:01 PM

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif Apa itu SQLite? Gambaran Keseluruhan Komprehensif Mar 04, 2025 pm 03:55 PM

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Mar 04, 2025 pm 03:54 PM

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Mar 04, 2025 pm 03:49 PM

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Mar 18, 2025 pm 12:00 PM

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)? Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)? Mar 21, 2025 pm 06:28 PM

Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)?

See all articles