2016-07-20 7 views
2

사용자가 업로드 한 파일을 저장하는 테이블이 있습니다. 프로필 사진, cpr 파일, 학위 파일, 비디오 파일, 백그라운드 체크 파일 등 5 가지 파일 유형이있을 수 있습니다.MYSQL의 특정 행을 업데이트하는 방법

file_id, user_id, file_type, file_size, file_name, file_new_name, file_path, file_cat, date_created 

내 질문 :

  1. 이 구조는 효율적인 또는 나는 5 개 개의 다른 테이블을 만들어야합니다

    테이블 구조는 무엇입니까?

  2. 업데이트하고 싶다면 사용자 프로필 사진 행을 말하면 가장 좋은 방법은 무엇입니까? --- 최선의 해결책이 아닌 해결책을 찾았습니다. 행을 업데이트합니다. file_cat = "profile_picture" and user_id=:user_id. 시스템에 많은 부하가 걸릴 것입니까?
  3. 먼저 사용자가 가입 할 때 파일이 없습니다. 양식에 숨겨진 값을 사용하여 insert into ... VALUES ... on duplicate key update 사용자를 표시해야합니까?

감사합니다.

+0

파일을 데이터베이스에 저장하지 마십시오. 디스크에 저장하십시오. 데이터베이스에있는 파일의 위치를 ​​참조하십시오. –

+0

구조에 관해서 - 그것은 제 생각이지만 프로필 사진은 자주 액세스 할 것이므로 자신의 테이블을 가지고있는 것이 좋습니다. 이들에 대한 쿼리는 나머지와 함께 저장되는 경우보다 훨씬 빨리 반환되어야합니다. – PockeTiger

+0

@KIKOSoftware 예. 파일은 디스크에 저장되고 경로는 DB에 있습니다. – raqulka

답변

5

이것은 세 가지 질문이 아닙니다.

이 구조가 효율적입니까, 아니면 5 가지 테이블을 만들어야합니까? 내가 업데이 트하려는 경우

하나의 테이블이 충분히

좋은, 그것을 할 수있는 가장 좋은 방법 일 것입니다 무슨 다음 , 사용자 프로필 사진 행 말할 수? --- 나는 최선의 해결책이 아닌 해결책을 생각해 냈습니다. file_cat = "profile_picture"및 user_id = : user_id가있는 행을 업데이트합니다. 시스템에 많은 부하가 걸릴 것입니까?

file_cat, user_id (두 필드의 합성 색인)에 색인이있는 경우에는 제외됩니다. 당신은 상황이 조금 야윈 대신 'profile_picture'등의 예를 들어

profile_picture = 1 
cpr = 2 
.... 
background = 6 

이는 테이블과 인덱스가 조금 작게 만들 것의 정수를 저장할 수 있도록합니다. 일 수도 있고 일 수도 있습니다.

처음 사용자가 가입 할 때 파일이 없습니다. 사용자에게 을 삽입해야합니까? VALUES ... 양식의 중복 값이 ​​ 인 중복 키 업데이트시 사용 하시겠습니까?

필요하지 않습니다. 새로운 사용자를위한 기록이 없다는 것은 실제로 일을 쉽게 만듭니다. COUNT(*) = 0 쿼리를 수행하거나 행을 페치하지 않고도 쿼리를 수행 할 수 있습니다 (EXISTS).

업데이트 : 다음은 쿼리가 제대로 후 기본 키를 사용하는 경우 사용자가 프로필 PICC

SELECT * from users WHERE exists (SELECT * from pictures where pictures.user_id = users.id) 
+0

설명 주셔서 감사드립니다. – raqulka

+0

존재하는 쿼리에 대한 간단한 예제를 제공 할 수 있습니까? – raqulka

+0

행 수를 사용했습니다. 더 많은 일이있는 것 같지만 작동합니다. 성능 현명하고, 행 수가 존재하는 경우 거기에 어떤 차이가 있습니까? – raqulka

1

을 업로드 한 경우 신속하게 찾을 조인 또는 예를 들어 하위 쿼리를 처리 할 때 유용 정말 EXISTS insert ... on duplicate key update ... 쿼리는 모든 것을 처리합니다.

테이블의 경우 기본 키 열을 정의해야합니다. 이 경우 귀하의 file_id 열이라고 말할 수 있습니다. 따라서 삽입을 수행하면 MySQL 서버는 file_id 열이 이미 해당 값으로 정의되어 있는지 확인합니다. 새 값으로 업데이트하려면 다른 file_id을 사용하여 새로운 데이터 행을 추가하십시오.

필자는 분리 할 수 ​​있어야하며, 새로운 행을 생성하기위한 스크립트와 업데이트를 위해 하나의 스크립트를 작성해야합니다. 일반적으로 응용 프로그램에서 업데이트하는 것과는 대조적으로 만들 때를 알 수 있습니다. 다시 기본 키를 사용하면 많은 도움이됩니다. where 절에서 기본 키를 사용하면 가장 효율적인 업데이트 방법 중 하나입니다.

https://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

+1

설명해 주셔서 감사합니다. 그것을 많이 고맙게 생각합니다. – raqulka

관련 문제