집 >데이터 베이스 >MySQL 튜토리얼 >쉼표로 구분된 값이 있는 테이블에 대한 SQL 쿼리를 최적화하는 방법은 무엇입니까?
쉼표로 구분된 열 값이 있는 테이블에 대한 SQL 쿼리 최적화
열에 쉼표로 구분된 값이 포함된 테이블을 처리할 때 특정 실행 쿼리는 어려울 수 있습니다. 일반적인 시나리오는 쉼표로 구분된 열 내에서 특정 값을 검색할 때 모든 관련 데이터를 검색하는 것입니다.
문제:
특정 항목과 연결된 모든 사용자 이름을 검색해야 합니다. 쉼표로 구분된 열의 값입니다. 예를 들어, 아래 테이블 구조에서 다음을 검색할 때 모든 사용자 이름을 찾으려고 합니다. "new1."
테이블:
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');
쿼리:
select * where nname="new1" from tblC CROSS JOIN tblB ON tblB.userid=(SELECT userids FROM substr(tblC.userids,','))
제한 사항:
이 쿼리는 SUBSTR 및 FIND_IN_SET 함수를 사용합니다. 대규모 데이터 세트에는 비효율적입니다. 또한 행당 하나의 쉼표로 구분된 값만 가정하지만 항상 그런 것은 아닙니다.
권장 솔루션:
데이터베이스 정규화:
쉼표로 구분된 별도의 테이블을 생성하여 데이터베이스 스키마를 정규화하세요. 가치. 이는 문자열을 통한 검색의 비효율성을 제거하고 쿼리를 단순화합니다.
예시 스키마:
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');
최적화됨 쿼리:
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"
이점:
위 내용은 쉼표로 구분된 값이 있는 테이블에 대한 SQL 쿼리를 최적화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!