2016-07-19 2 views
0

그래서 난 그냥 다음 필드가 하나 개의 테이블을 보유하고 데이터베이스를 설정 한 :SQL 쿼리 속도와 정제

key_value : 보유 핵심

구속 6 자리 코드 : 키의 경우에 대한 부울 구속되어

redeemed_by : 그것을

redeemed_date을 구속 : 소프트웨어 t의 이름 : 그것은

SOFTWARE_NAME 구속되었을 때 그 열쇠는

과 관련이 있습니다. 기본적으로 빈 데이터베이스로 시작한 다음 누군가가 PayPal을 통해 구매하면 자신의 키를 가져와 데이터베이스에 추가됩니다. 이 후 앱을 열면 코드가 입력되어 데이터베이스에서 검색되고 다시 사용될 수 없으므로 다시 사용할 수 없습니다. 따라서 코드가 하나의 테이블에 있습니다.

내가 구매 한 수천 개에 도달하면 데이터베이스의 주요 속도가 느려지 는가? 그것이 더 큰 숫자라면, 10,000을 말하겠습니까?

내가 구속 된 다른 테이블의 테이블을 보유하고 있다고해도 정확히 이것을위한 좋은 해결책은 무엇입니까? 구속되었는지 확인하기 위해 구속 된 테이블을 조사해야합니까?

답변을 주셔서 감사합니다. 아직 데이터베이스와 SQL을 배우고 있습니다!

+2

mysql에 10,000 개의 레코드에 문제가있는 경우 대량 오버로드 및/또는 성능이 낮은 머신에서 실행 중입니다. 문자 그대로 수십억 개의 레코드가있는 mysql 인스턴스가있다. –

답변

1

나는 당신의 디자인이 건강하다고 생각합니다. 실행중인 쿼리를 기반으로 인덱스를 추가 할 수 있습니다. key_value는 교환 된 항목을 업데이트하기위한 색인 역할을하는 좋은 기본 키와 같습니다.

Marc B에서 언급했듯이 하드웨어는 성능면에서 유일한 고려 사항입니다.

1

나는 이것을 위해 두 개의 테이블을 사용할 것입니다 : 하나는 spec'ed에 대한 것이지만 다른 하나는 정기적으로 사용/만료 된 레코드를 마이그레이션하는 작업이있는 아카이브 테이블입니다.

추론 :이 테이블의 주된 목적은 구속의 이익을위한 것이지 아카이브 용이 아닙니다. 시간이 지남에 따라 더 많은 회수 된 레코드가 테이블에서 발견 될 때, 회수되지 않은 레코드의 조회 성능은 테이블의 모든 "deadwood"로 인해 악화되기 시작합니다. (이베이 주택은 한 테이블에서 모든 활성 및 완료된 경매가 있다고 생각하십니까?)

"한 테이블"솔루션이 절대적으로 필요한 경우 두 테이블을 병합하는보기를 쉽게 만들 수 있습니다.

또한 적절한 기본 키를 설정하면 성능이 잠시 저하되지 않으므로 레코드 볼륨이 커질 때 암시하는 테이블 스캔을 제거 할 수 있습니다.