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?

DDD
Lepaskan: 2024-12-18 00:24:11
asal
447 orang telah melayarinya

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan