2012-06-18 6 views
2

SQL 테이블에 값 a, b, c를 저장한다고 가정하십시오. 한 옵션은 abc와 같은 구분 기호로 SQL DB의 한 열에 저장해야합니다 , b, c 값은 '-'를 포함하지 않습니다.) 그리고 나서 그것을 검색 한 후에 PHP에 의해 파싱합니다. 또 다른 옵션은 세 개의 값을 모두 다른 열에 저장해야한다는 것입니다.PHP-MySql의 한 열 또는 여러 열

내 질문은 :

하나 개의 컬럼에 저장하는 것 +을 찾는 중 + 구문 분석 시간이 더 걸릴?

또는

세 가지 다른 열 저장 및 더 시간과 자원이 소요됩니다 검색?

참고 : 언제든지 'a'를 검색하는 중 'b'와 'c'를 모두 검색해야하는 경우 'b'와 c를 모두 검색해야합니다.

답변

0

3 개의 별도 열에 저장해야합니다. DB가 만들어지고 성능 문제가 두려워서는 안됩니다 :)

그러면 데이터를 선택한 후 파싱의 고통을 덜어 주므로 데이터베이스의 모든 가능성을 사용할 수 있습니다. count occurences 각 값의 ...

+0

답변 해 주셔서 감사합니다. Olivier. 내가 말하는 데이터에 다른 기능을 사용할 필요가 없습니다. 트래픽이 많을 때 성능이 필요하다는 것입니다. – Netham

+0

데이터를 한 열에 저장 한 다음 구문 분석하면 결국 시간이 오래 걸린다는 것을 알 수 있습니다. 그리고, ** 당신이 필요하지는 않지만 기능 할 수있는 기능을 과소 평가하지 마십시오. : –

0

인덱스으로 3 개의 열을 사용하는 것이 옳습니다. MySQL은 B-tree structure에 인덱스를 저장하기 때문에 PHP로 검색하고 파싱하는 것보다 더 빠릅니다. More about indexing.

0

MySQL이 3 대신 쿼리 할 테이블을 하나만 가지고 있기 때문에 모든 열을 하나의 열에 저장하는 것이 약간 빠릅니다. 그러나 테이블을 분할해야하는 질문은 성능과 관련이 없어야하며 데이터 모델을 정규화해야합니다. 자세한 내용은 http://en.wikipedia.org/wiki/Database_normalization을 참조하십시오.

설명 용 'users'라는 테이블 이름이 있다고 가정합니다. 사용자의 ID, 이름, 성 및 도시를 저장하려고한다고 가정 해보십시오. 그것들을 별도의 테이블에 두는 것은 이치에 맞지 않습니다. 그러나 웹샵이나 다른 곳에서 사용자의 주문을 저장하려는 경우 동일한 테이블에 저장할 수 없습니다. 뿐만 아니라 뭔가 다른 우려 (주문 대 사용자),하지만 당신은 얼마나 많은 명령을 사용자가 배치하려고하는지 모르기 때문에, 당신은 새로운 테이블이 필요합니다.

그래서 정규화 = 좋음, 당신은 = 나쁜 수 있기 때문에 별도의 테이블에 필드를 넣습니다.

+0

답해 주셔서 감사합니다. 내가 말하는 데이터의 특정 3 열은 색인이 아닙니다. 그들은 하나의 테이블의 간단한 데이터 부분 일 것이고 키는 분리 될 것입니다. – Netham

+0

저장할 데이터의 주제에 대해 자세히 설명해 주시겠습니까? 아니면 더 나은, 필드 이름을 줄 수 있습니까? –

0

문자열을 구문 분석해야하는 번거 로움을 덜어주는 것이 좋습니다. 이렇게하면 더 많은 함수 오버 헤드가 필요할 수 있습니다.

또한 세 개의 값이 모두 필요하다는 것은 열의 수가 중요하지 않음을 의미하지 않습니다. 별도의 3 열을 사용하면 값 비싼 쿼리 호출을 수행하지 않고도 A를 개별적으로 쿼리하여 원하는 데이터에 대한 행을 구문 분석하고 검색 할 수 있습니다.

0

varrible의 수가 항상 같은 경우 3 개의 다른 열을 사용해야하지만 그렇지 않은 경우 그 값을 1 열에 넣을 수 있습니다. 내가 #,이 #value# 같은 것을 추가하고 그 값을 원할 때 나는 단지 PHP 함수 explode ('#', $ sql_val)을 사용합니다.

0

고려해야 할 점 : "D"또는 "E"... 열을 추가해야합니까??

답이 예 또는 어쩌면 조회 테이블이 미래의 데이터베이스 증명에 도움이 될 것입니다. 열 A, B 또는 C가

0

흥미로운 사실은 내가 3 열 솔루션을 성능에 대해 I 동안 DB을하는 표준 방법 일명 정확한 수 있다는 것입니다 선택 될 경우

도 적용됩니다 당신의 솔루션에 자신을 발음 할 수 없습니다. 왜? 올바르게 구현합니까? 버그가 없습니까? 코드가 검토되면 이러한 디자인은 매우 쉽게 거부됩니다.

마음에 두어야 할 또 다른 사항은 코드 유지 관리입니다. 한 달 전에 쓰여진 것을보고 "이 사람이 생각한 것은 무엇입니까?"라고 생각하는 경우가 종종 발생합니다. 특히 그 녀석 인 때.

+0

오 이런 질문에 2 yo : D 조 – UmNyobe