2010-12-29 2 views
2

안녕하세요, 나는 std::map<key, value>을 가지고있는 데이터를 SQL 데이터베이스에 작성하려고합니다. 맵에서 키는 쉽게 검색 할 수 있도록 정렬되어 있지만 맵 항목의 sql에 테이블을 만들면 키 ID로 레코드를 얻기 위해 테이블을 검색하는 것이 얼마나 어려울까요?SQL 데이터베이스를 검색하는 것이 얼마나 효율적입니까?

+1

왜 검색해야합니까? "검색"이란 정확히 무엇을 의미합니까? 그것은 SQL의 핵심이므로 원하는 데이터 만 선택할 수 있습니다. – Falmarri

+0

SQL DB가 std :: map보다 빠르냐고 묻고 있습니까? –

+0

키로 레코드를 검색하는 속도가 얼마나 빠르거나 느린 지 알고 싶었습니다. – kox

답변

1

SQL SELECT 문을 사용하는 방법을 학습하는 것만 큼 어렵습니다.

+0

그게 무슨 뜻입니까? – kox

+0

SQL을 사용하는 방법을 알게되면 문제는 매우 간단합니다. 즉, SQL에 관한 책을 읽으면 99 % 완료됩니다. –

+0

나는 그 진술을 이미 알고 있지만 같은 결과를 얻을 수 있는지 묻고 있었다. – kox

4

검색이 쉽고 효율이 색인 생성의 정확성에 달려 있습니다.

0

비효율적 일 수있는 것은 여러 가지 SQL select 문을 구성하고 해체하는 것입니다. 여기서 원하는 것은 변수의 "where"절에서 다른 값입니다.

이렇게하면 저장 프로 시저가 훨씬 더 효율적일 수 있습니다.

0

당신은 질문이 애매하지만 사과와 오렌지를 비교하는 것처럼 보입니다. SQL은 효율적으로 데이터를 검색하도록 설계되었습니다. C (또는 다른 언어) 키 - 값 쌍은 RAM으로 제한되어 있으므로 확장 성이 크게 떨어집니다. RDBMS와의 통신에는 오버 헤드가 있습니다. 메모리 압력, 디자인 효율성 (즉, 선택한 데이터 유형 및 색인), 알고리즘 C++에서 조회 (해시/B 트리) 등을 구현합니다.

하루가 끝날 때까지 올바른 질문은 , "작업에 가장 적합한 도구는 무엇입니까?" 그리고 그대로 두십시오.

0

지도에서 데이터베이스 테이블로 데이터를 삽입한다고 가정하면 테이블의 기본 키 즉지도에 사용하는 키가 있고지도에 중복 키가 허용되지 않으므로 각 키에 대한 고유 키가 있습니다 기록.

테이블 키의 색인을 생성하십시오. 색인을 작성하십시오. 그렇지 않으면 모든 조회가 전체 표 스캔을 수행하고 고유 행을 갖는 모든 이점이 소모됩니다. 그러나 맵핑에 100 개의 행만있는 경우에는 테이블에 인덱스를 작성하여 불필요하게 오버 헤드가 발생합니다.

인덱스를 만드는 것은 데이터베이스마다 다를 수는 없지만 사용중인 데이터베이스와 얼마나 많은 데이터를 테이블에 저장할지 모르는 상태에서 효율성을 예측하는 것은 매우 어렵습니다.

0

데이터가 메모리 std :: map에 적합하면 모든 DB가 훨씬 효율적입니다.

내가 메모리 데이터베이스 및 표준 : :지도 sqlite3를에 대해 테스트 한 후에는 크기 순서로 빨랐다 (그리고 SQLite는이 경우에 매우 빠른 속도 내가 본 다른 RDBMS 후입니다)

이유 : 중간 계층이없는 데이터 구조에 직접 액세스 할 수 있으므로 트리를 매우 빠르게 처리 할 수 ​​있습니다.

그러나 데이터가 너무 크거나 너무 많은 메모리를 사용하지 않으려는 경우 RDBMS는 좋은 솔루션이며 키에 대한 색인이 매우 빠르다.

관련 문제