Heim > Datenbank > MySQL-Tutorial > Wie optimiere ich SQL-Abfragen für Tabellen mit durch Kommas getrennten Werten?

Wie optimiere ich SQL-Abfragen für Tabellen mit durch Kommas getrennten Werten?

DDD
Freigeben: 2024-12-18 00:24:11
Original
449 Leute haben es durchsucht

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

Optimieren von SQL-Abfragen für Tabellen mit durch Kommas getrennten Spaltenwerten

Beim Umgang mit Tabellen, in denen eine Spalte durch Kommas getrennte Werte enthält, wird eine bestimmte Ausführung durchgeführt Abfragen können eine Herausforderung sein. Ein häufiges Szenario ist das Abrufen aller zugehörigen Daten bei der Suche nach bestimmten Werten in der durch Kommas getrennten Spalte.

Problem:

Sie müssen alle mit einem bestimmten Wert verknüpften Benutzernamen abrufen Wert in einer durch Kommas getrennten Spalte. In der Tabellenstruktur unten möchten Sie beispielsweise alle Benutzernamen finden, wenn Sie nach „new1“ suchen.

Tabellen:

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');
Nach dem Login kopieren

Abfrage:

select * where nname="new1" from  tblC
CROSS JOIN tblB
ON tblB.userid=(SELECT userids FROM substr(tblC.userids,','))
Nach dem Login kopieren

Einschränkungen:

Diese Abfrage basiert auf dem SUBSTR- und FIND_IN_SET-Funktionen, die bei großen Datensätzen ineffizient sein können. Darüber hinaus wird nur ein durch Kommas getrennter Wert pro Zeile angenommen, was möglicherweise nicht immer der Fall ist.

Empfohlene Lösung:

Datenbanknormalisierung:

Normalisieren Sie Ihr Datenbankschema, indem Sie eine separate Tabelle für die durch Kommas getrennten Werte erstellen. Dadurch entfällt die Ineffizienz beim Durchsuchen von Zeichenfolgen und die Abfrage wird vereinfacht.

Beispielschema:

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');
Nach dem Login kopieren

Optimiert Abfrage:

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"
Nach dem Login kopieren

Vorteile:

  • Verbesserte Leistung durch effiziente Join-Operationen
  • Reduzierte Komplexität durch Eliminierung von String-Manipulationen Funktionen
  • Wartbarkeit und Flexibilität bei der Anpassung zukünftiger Änderungen an den Daten Struktur

Das obige ist der detaillierte Inhalt vonWie optimiere ich SQL-Abfragen für Tabellen mit durch Kommas getrennten Werten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage