2014-03-19 2 views
0

우리는 yii에서 복잡한 UI로 응용 프로그램을 개발하고 있습니다. 나는 프로그래머가 아니지만 응용 프로그램 페이지로드 시간이 느린 것으로 나타났습니다.yii 다중 데이터베이스 쿼리 또는 배열

MySQL 쿼리 로깅을 설정했는데 "select x,y,z from table where id = 1", "select x,y,z from table where id = 2", "select x,y,z from table where id = 3"과 같은 반복 쿼리 인스턴스가 많다는 것을 알았습니다. 이들을 단일 "select x,y,z from table where id in (1,2,3)"으로 바꾸면 사실상 단일 쿼리 중 하나를 실행하는 것과 동일한 지속 시간이 소요됩니다. 집계 할 때 로딩 시간에서 수십 배의 면도를 줄일 수 있습니다. 루프 내에서 쿼리가 발생하는 것처럼 보입니다. where 절이 먼저 생성되고, 모든 데이터가 배열로 검색된 다음 배열을 통해 반복됩니다.

내가 이것을 프로그래밍 팀에게 지적했을 때, PHP에서 배열을 반복하면서 별도의 SQL 호출을하는 것만큼이나 느리다는 말을 들었습니다. 나는 다른 프로그래밍 언어에 대한 나의 경험을 감안할 때 이것이 어렵다고 생각한다. DAO가 쉽게 이것을 할 수있는 것처럼 보인다. 다른 문제는 복잡한 모델 인 것처럼 보입니다. 어떤 충고라도 받아 들였다.

답변

0

다릅니다. 귀하의 배열 못해서 세션 저장을위한 이후의 전화에 대한 직렬화되지 않을 경우, 나는 그것이 메모리에 배열을 쿼리하는 것이 db에 여러 번 호출하는 것보다 빠르다고 생각합니다. 그러나 나는 또한 실제로 모든 데이터를 사용하지 않는 한 실용적이지 않다고 생각합니다. 이는 엄청난 수의 행을 가져와 사용자에게 표시하지 않을 것임을 의미합니다. 그리고 나는 또한 이것이 당신의 데이터베이스의 힘을 낭비하는 데 도움이되지 않는다고 생각합니다. Massive PHP array vs MySQL Database?을보십시오. 확실하지 않은 경우 인스턴트 메신저 여기에 인스턴트 메신저하지만 내 조언을 어떻게 든 올바르게 먼저 귀하의 DB를 쿼리 그래서 정확히 한 번만 귀하의 쿼리를 구축하려고 노력하고 그것은 너무 많은 정보를 페이지 매김을 사용하여 그냥 고정 행 번호 매번. 희망은 도움이 될 것입니다 ...

+0

대부분의 경우 10 ~ 20 개의 단일 호출이 하나의 코드 작성이 어려우며 단일 호출 중 하나와 동일한 지속 시간을 갖는 경우 db에 대해 수행되는 것처럼 보입니다. 따라서 문제는 코딩 작업을 수행 할 가치가 있는지 여부입니다. 우리는 HTML 페이지가 필요로하는 10-20 행을 말하고 있습니다. 즉, 즉시 사용하지 않을 데이터가 없습니다. 각 페이지는 이러한 호출을 여러 번받습니다 (총합 100). – user3438020