2014-07-08 3 views
1

내 응용 프로그램에 사용자가 약 1000-2000 행의 Excel 시트를 업로드하는 모듈이 있습니다. 나는 엑셀 파일을 읽는데 엑셀 리더를 사용하고있다. 다음과 같은 열이 거기 엑셀에서EXCEL + MySQL 처리 최적화

있습니다

1) SKU_CODE : VARCHAR(100) Primary key 
2) NEW_INVENTORY INT 
3) STATUS : 0/1 BOOLEAN 

이 두 가지 옵션이 있습니다 :

1) SKU_CODE 
2)PRODUCT_NAME 
3)OLD_INVENTORY 
4)NEW_INVENTORY 
5)STATUS 

나는 SKU 코드에 관한 데이터를 포함하는 MySQL의 테이블 재고이 나와 함께 :

옵션 1 : PHP의 모든 레코드를 처리하는 모든 sku_codes를 추출하여 쿼리에 mSQL을하려면 다음을 수행합니다

Select * from inventory where SKU_CODE in ('xxx','www','zzz'.....so on ~ 1000-2000 values); 

- Single query 

옵션 2 : 현재 SKU 데이터

Select * from inventory where SKU_CODE = 'xxx'; 
.. 
... 
around 1000-2000 queries 
하나에 의해 각 레코드를 처리하는 것입니다

좋은 제품 모듈을 확신 할 수 있도록 적절한 설명으로 위의 작업을 수행하는 가장 좋은 방법을 선택하도록 도와주십시오.

+0

벤치 마크를 수행하지 않으면 단일 쿼리가 더 빠를 것이라고 확신 할 수 있습니다. 각 sku에 대한 쿼리를 사용하려면 [prepared statements] (http://www.php.net/manual/en/mysqli.prepare.php)를 사용해야합니다. – jxmallett

답변

1

중간에 특정 최적의 BATCH_SIZE가 있어야하며 데이터베이스를 쿼리하기위한 기준으로 사용하십시오. 예제 일괄 처리 크기는 5000 일 수 있습니다. 따라서 Excel에 2000 개의 행이 포함되어 있으면 모든 데이터가 단일 쿼리로 반환됩니다. Excel에 19,000 개의 행이있는 경우 4 개의 검색어, 즉 0-5000 개의 SKU 코드, 5001-1000 개의 SKU 코드 등을 수행합니다. 벤치 마크에 따라 BATCH_SIZE에서 최적화를 시도하십시오. 데이터베이스 쿼리를 저장하는 것이 좋습니다.

2

아마 깨달은 것처럼 두 옵션 모두 장단점이 있습니다. 적절하게 색인 된 테이블에서, 둘 다 꽤 잘 수행되어야합니다.

옵션 1은 가장 빠를 가능성이 높으며 SKU의 수가 항상 제한되어 있고 사용자가 전체 파일을 처리 한 후에 결과로 만 작업을 수행 할 수 있다고 확신하는 경우 더 좋습니다.

옵션 2는 Excel 파일의 각 레코드를 개별적으로 처리 할 수 ​​있다는 점에서 매우 중요한 이점이 있습니다. 이것은 한 가지 방법으로 전체 파일을 구문 분석하지 않고 Excel에서 읽은 각 행에 대한 출력을 생성 한 다음 큰 쿼리를 실행할 수 있다는 점에서 흥미로운 옵션을 제공합니다.

+0

기본적으로 행별로 데이터 처리를 수행 할 때 mysql 성능이 저하되었습니다. 그래서 정말 사용하고있는 MySQL 쿼리에 대해 우려했다. 답장을 보내 주셔서 감사합니다. – abhinsit