(답변의 크기에서) 답변 찾기의 이론적 지수 복잡성을 고려할 때 관계형 데이터베이스가 전혀 작동하지 않는 이유는 무엇입니까?


19

관계형 데이터베이스 에서 쿼리 대한 답을 찾으려면 시간 가 필요하며 지수 제거 할 수없는 것으로 알려져 있습니다. .D | D | | Q | | Q |QD|D||Q||Q|

로 매우 클 수 데이터베이스가 실제로는 전혀 작동 이유, 우리는 궁금합니다.D

실제 응용 프로그램에서 일반적인 쿼리가 전혀 크지 않은 문제입니까? (그러면 관계형 데이터베이스 시스템에 부과되는 일반적인 쿼리 크기와 실제로 DB 시스템에서 효과적으로 응답 할 수있는 쿼리의 "최대"크기가 무엇인지 아는 것이 흥미 롭습니다 .)

지수에 대한 메모'이동식'이 아님|Q|

지수제거 할 수없는 경우 데이터베이스에서 제공 한 그래프 에 크기 의 도가 있는지 묻는 쿼리를 사용할 수 있습니다 . 그래프에 -clique가 있는지 확인하는 것은 NP-complete 문제입니다. 또한 매개 변수 고정 매개 변수를 다루기 어렵습니다 . 자세한 내용은 예를 들어 Libkin, L .: Elements Of Finite Model Theory 에서 찾을 수 있습니다 . Springer (2004) 또는 Papadimitriou, CH, Yannakakis, M .: 데이터베이스 쿼리의 복잡성. J. 컴퓨팅 시스. 공상 과학 58 (3), 407–427 (1999)n n n|Q|nnn



7
일반적인 검색어 (와 같은 SELECT * FROM users WHERE username="abc" AND passwrod="xyz")는 간단한 검색으로 O (| D |)를 실행합니다. 관련 데이터베이스 필드에 색인이 있으면 O (log | D |)를 사용합니다. 나는 데이터베이스에 익숙하지 않지만 더 복잡한 쿼리가 기하 급수적으로 걸릴 것이라고 생각하지 않습니다.
MS Dousti

7
@imz : 귀하의 예에서 복잡도는 이며 여전히 다항식입니다. 쿼리에 k 조인이 있으면 복잡도가 . 이것은 고정 k의 다항식이지만 큰 k의 경우 쿼리 실행이 실제로 느릴 것이라고 생각합니다. 따라서 모든 비용으로 너무 많은 조인을 피해야합니다. O ( | D | k + 1 )영형(||2)영형(||케이+1)
MS Dousti

7
최악의 경우 쿼리 길이에있어 시간 복잡성은 기하 급수적입니다 . 긴 쿼리가 빠르다는 것은 아닙니다. 데이터베이스 전문가는 일반적인 데이터베이스 엔진에서 어떤 쿼리가 빠르게 실행되는지 알고 있으며, 쿼리 길이 측면에서 최악의 경우에 의존하지 않습니다.
이토 쓰요시

2
@Kaveh : "Immerman 's Descriptive Complexity 책은 마지막 장에서 약간의 토론을했습니다": 아주 좋은 제안. Nitpicking : 두 번째 장에서 설명합니다. @imz : SQL의 Expressive Power of paper도 유용 할 것입니다.
MS Dousti

5
@imz : "이 그래프는 n- 클리크를 가지고 있습니까?"는 실제로 일반적인 쿼리가 아닙니다. 대부분의 쿼리는 @Sadeq가 제안한 쿼리와 비슷하며 강력한 트리 구조를 가지고 있습니다. 또한, 실제로 큰 데이터베이스의 경우 완전한 선형 쿼리조차도 너무 비싸며 데이터베이스 스케치 작업을 수행해야합니다.
András Salamon

답변:


16

최악의 경우에도 "쉬운"큰 클래스의 쿼리가 있습니다. 특히 쿼리 클래스에 연결 쿼리 만 포함되어 있고 각 쿼리에 너비 (예 : 트리 너비, 발생률의 트리 너비, 부분 하이퍼 트리 너비 또는 하위 모듈 식 너비)가있는 경우 조인 트리와 같은 것을 사용하여 쿼리에 응답 할 수 있습니다. 트리에서 벗어난 쿼리의 로컬 부분에 대한 무차별 대입 열거와 함께. 폭 변수에 의해 결정된 다항식의 정도와 함께 다항식 시간이 필요합니다.

실제로 발생하는 많은 쿼리가 결합 적이며 너비가 작은 것 같습니다. 따라서이 경우 다항식 런타임의 정도가 낮습니다.

Dániel Marx는 최근 STOC 2010에서 하위 모듈 식 너비에 대한 논문을 발표했습니다. 정식 버전에는 다양한 너비 개념과 CSP 공식이 데이터베이스 형식과 어떻게 관련되어 있는지에 대한 요약이 포함되어 있습니다 (컨퍼런스 버전에는 부족함).

  • Dániel Marx, 구속 조건 만족 및 결합 쿼리에 대한 추적 가능한 하이퍼 그래프 속성 , 2010. arxiv : 0911.0801

데이터베이스 쿼리의 "일반적인"복잡성을 처리하지는 않지만 최악의 경우에도 쉬운 쿼리가 있기 때문에 완전한 대답은 아닙니다.


6

쿼리 Q_n을 사용하여 데이터베이스로 표현 된 그래프에 n 개의 요소가있는 도가 포함되어 있는지 확인할 수 있습니다. 그래프에 경사가 있는지 확인하는 것은 NP- 완전 문제입니다. 또한, 매개 변수 n (D ^ n을 의미)으로 고정 매개 변수를 다루기 어렵습니다.


질문의 배경에 관한 추가 설명은 질문 아래에 "댓글 추가"버튼이있는 "댓글"( "답변"아님) 또는 아래 "편집"링크를 사용하여 편집 제안으로 게시하십시오. 질문. "답변"은 질문에 대한 토론과 추가를위한 것이 아닙니다. (익명 사용자로 등록하면 여기에 참여하는 것이 더 편리해야합니다. 그러면 토론에서 누가 무엇을 말했는지 쉽게 추적 할 수 있습니다.)
imz-Ivan Zakharyaschev

@imz : 댓글에 대한 특권이 없기 때문에 답변으로 넣었습니다. 담당자는 50 명 이상이어야합니다. 모든 곳에서 댓글을 달 수 있습니다.
Tomek Tarczynski

@Tomek, @imz, 답변을 사용하여 주석을 달아야 하는지 여부는 현재 메타 에 대해 논의되고 있습니다.
Kaveh

5

이 질문에 대답하는 또 다른 방법은 "그렇지 않습니다!"입니다.

일반적인 DBMS 구현에 매우 많은 수의 조인이 포함 된 쿼리를 제공하는 경우 쿼리가 비순환 적이거나 그렇지 않은 경우와 같이 매우 단순한 구조를 가지더라도 계획 / 최적화 단계 (평가는 제외)를 지나치지 않습니다. András는 위를 암시합니다.

그러나 "일반적인"DBMS 워크로드의 경우 이러한 쿼리가 발생하지 않는 것 같습니다.


1
복잡한 쿼리의 경우 최적화 단계의 결과는 무작위로 선택된 계획입니다. 실행 경로가 여전히 "충분히 충분"할 수 있기 때문에 이것은 소리만큼 나쁘지 않으며 최적화가 조인 수의 조합보다 어려운 이유가 더 많습니다.
Tegiri Nenashi

4

다음은 실제로 (관계형) 데이터베이스를 많이 사용하는 사람의 관점에서보다 실제적인 버전의 tigreen의 답변입니다. 응용 프로그램의 요점과 복잡성은 적은 양의 항상 필요한 모든 쿼리에 대해 조인하므로 실제로는 Do Work 입니다. 다시 말해서 데이터베이스가 자체적으로 복잡한 문제를 해결할 것으로 기대하지는 않습니다. 그렇지는 않지만 현명하게 사용하면 정말 편리하고 적용 가능한 도구입니다.


0

조인은 다 대다 관계에 대해서만 이차적입니다. 실제로는 드물다. 실제로 대부분의 관계와 조인은 일대 다이므로 인덱스 / 키가 정의되면 선형 시간이 걸립니다. 다 대다 조인 여러 개있는 쿼리 는 심각한 문제입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.