2014-01-23 5 views
0

데이터를 가져 오려고하는 데이터베이스에는 약 50,000 개의 문서가 있습니다. 현재 iOS 또는 Android 기기가 조회시 휴대 기기에 데이터를 쿼리하고 표시하는 데 약 90 초가 걸립니다. 내 코드는 아래에 게시됩니다. 이 속도를 높이기 위해 다르게 할 수있는 것이 있습니까? 모든 팁 주셔서 감사.보기 데이터 가져 오기 속도 향상?

function updateAllPoliciesTable() { 
    try { 
     var db = Alloy.Globals.dbPolicyInquiry; 
     var view = db.getView("AllRecordsByInsured"); 
     var vec = view.getAllEntriesBySQL("Agent like ? OR MasterAgent like ?", [Ti.App.agentNumber, Ti.App.agentNumber], true); 

     var ve = vec.getFirstEntry(); 
     var data = []; 
     while (ve) { 
      var unid = ve.getColumnValue("id"); 
      var row = Ti.UI.createTableViewRow({ 
       unid : unid, 
       height: '45dp', 
       rowData: ve.getColumnValue("Insured") + " " + ve.getColumnValue("PolicyNumber") 
      }); 

      var viewLabel = Ti.UI.createLabel({ 
       color : '#333', 
       font : { 
        fontSize : '16dp' 
       }, 
       text: toTitleCase(ve.getColumnValue("Insured")) + " " + ve.getColumnValue("PolicyNumber"), 
       left: '10dp' 
      }); 

      row.add(viewLabel); 
      data.push(row); 
      ve = vec.getNextEntry(); 
     } 

     //Ti.API.log("# of policies= " + data.length); 

     if(data.length == 0) { 
      var row = Ti.UI.createTableViewRow({ 
       title : "No policies found" 
      }); 
      data.push(row); 
     } 

     $.AllPoliciesTable.setData(data); 
     Alloy.Globals.refreshAllPolicies = false; 
     Alloy.Globals.loading.hide(); 
    } catch (e) { 
     DTG.exception("updateAllPoliciesTable -> ", e); 
    } 
} 
+1

쿼리를 반환하는 데 걸리는 시간을 계산할 수 있습니까? UI 또는 DB에 중단이 있습니까? 'like' 쿼리를 사용해야합니까? –

+0

요시아는 좋은 지적입니다. 느린 화면으로의 데이터 검색 또는 데이터 검색입니까? 다른 사용자가 제안한대로 색인을 작성해야 할 수도 있고 행 코드를 최적화해야 할 수도 있습니다. TableViewRow의 className을 조사하십시오. – Martin

답변

1

속도를 높여야하는 적절한 테이블에 인덱스를 만듭니다. 보기에 대한 SQLite 테이블의 이름은 "view_AllRecordsByInsured"여야합니다. 해당 테이블에 대한 색인을 생성하십시오. 자세한 내용은 "CREATE INDEX"에 대한 SQLite 설명서를 참조하십시오.

그만큼 속도를 줄 경우 당신은 SQLite는 DBS에 대한 전체 텍스트 검색을 보면,

var sqldb = new DTGDatabase(Alloy.Globals.dbPolicyInquiry.localdbname); 
sqldb.execute("CREATE INDEX IF NOT EXISTS ON view_AllRecordsByInsured (Agent,MasterAgent)") 

처럼 DTGDatabase 클래스를 사용할 수, 해당 SQL을 실행합니다.

CREATE VIRTUAL TABLE ft_view__mobile_companies_ USING fts4(id, customername, customercity) 
INSERT INTO ft_view__mobile_companies_(id, customername, customercity) SELECT id, customername, customercity FROM view__mobile_companies_ 

이 (SQLite는 설명서를 참조하십시오) 당신이 MATCH 연산자 SQL을 실행하는 데 필요한 인덱스를 조회하려면 다음 여기 당신에게 시작점을 제공하는 전체 텍스트 인덱스에 대한 몇 가지 예제 코드입니다. 한 응용 프로그램에서 나는 Domino보기에서 동기화 된 100.000 이상의 데이터 세트를 가지고 있으며 SQLite에서 전체 텍스트 검색을 사용하여 검색하는 것은 즉시 작동합니다.

1

큰 데이터베이스 엔진과 달리 SQLite 데이터베이스 엔진은 제한되어 있으며 실행되는 장치도 제한되어 있습니다.

내가하려는 것은 데이터를 가져 오는 쿼리를 확인하는 것입니다. 테이블에서 인덱스를 사용하고 있습니까? 그것들을 쿼리에 사용합니까? 불필요한 조인 또는 당김이 있습니까?

나는 당신이 모바일 noSQL 솔루션을 체크 아웃하는 것을 고려해야하는 쿼리를 트윗하지 못한다. 나는 appcelerator 마켓 플레이스에 대해 알고있다. 당신의 요구에 맞는 것인지, 속도가 빠른지 확인하라.

관련 문제