힘들 게 짠 쿼리가 작동은 하는데 효율성이 있는지 모르겠어요
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.0 |
구현하고자 하는 건
- 특정 모듈 내에서
- url의 파라미터로 입력된 확장변수 값을 가지는 문서 목록을 기준으로
- 해당 문서들이 소속되어 있는 카테고리들의 1) 제목과 2) 문서갯수
를 가져오는 겁니다.
어렵게 어렵게ㅜ 다음과 같이 xml 쿼리를 짜긴 했는데요.
일단 원하는 작동이 구현되긴 합니다만, 딱 보기에도 너저분해서ㅠ
문법상 효율성에 무리가 있는지 봐주실 수 있을까요?
<query id="쿼리이름" action="select">
<tables>
<table name="document_categories" alias="cate" />
</tables>
<columns>
<column name="cate.*" />
<query id="getCategoryDocumentCount" alias="document_count">
<tables>
<table name="documents" alias="doc" />
</tables>
<columns>
<column name="count(*)" alias="count" />
</columns>
<conditions>
<condition operation="equal" column="doc.category_srl" default="cate.category_srl" />
<query operation="in" column="doc.document_srl" pipe="and">
<tables>
<table name="document_extra_vars" alias="extra" />
</tables>
<columns>
<column name="extra.document_srl" />
</columns>
<conditions>
<condition operation="in" column="extra.module_srl" var="module_srl" notnull="notnull" pipe="and" />
<condition operation="in" column="extra.eid" var="var_ref" notnull="notnull" pipe="and" />
<condition operation="like_prefix" column="extra.value" var="var_ref_value" pipe="and" />
</conditions>
</query>
</conditions>
</query>
</columns>
<conditions>
<condition operation="equal" column="cate.module_srl" var="module_srl" filter="number" notnull="notnull" />
<query operation="in" column="cate.category_srl" pipe="and">
<tables>
<table name="documents" alias="doc" />
</tables>
<columns>
<column name="doc.category_srl" />
</columns>
<conditions>
<query operation="in" column="doc.document_srl" pipe="and">
<tables>
<table name="document_extra_vars" alias="extra" />
</tables>
<columns>
<column name="extra.document_srl" />
</columns>
<conditions>
<condition operation="in" column="extra.module_srl" var="module_srl" notnull="notnull" pipe="and" />
<condition operation="in" column="extra.eid" var="var_ref" notnull="notnull" pipe="and" />
<condition operation="like_prefix" column="extra.value" var="var_ref_value" pipe="and" />
</conditions>
</query>
</conditions>
</query>
</conditions>
</query>
<tables>
<table name="document_categories" alias="cate" />
</tables>
<columns>
<column name="cate.*" />
<query id="getCategoryDocumentCount" alias="document_count">
<tables>
<table name="documents" alias="doc" />
</tables>
<columns>
<column name="count(*)" alias="count" />
</columns>
<conditions>
<condition operation="equal" column="doc.category_srl" default="cate.category_srl" />
<query operation="in" column="doc.document_srl" pipe="and">
<tables>
<table name="document_extra_vars" alias="extra" />
</tables>
<columns>
<column name="extra.document_srl" />
</columns>
<conditions>
<condition operation="in" column="extra.module_srl" var="module_srl" notnull="notnull" pipe="and" />
<condition operation="in" column="extra.eid" var="var_ref" notnull="notnull" pipe="and" />
<condition operation="like_prefix" column="extra.value" var="var_ref_value" pipe="and" />
</conditions>
</query>
</conditions>
</query>
</columns>
<conditions>
<condition operation="equal" column="cate.module_srl" var="module_srl" filter="number" notnull="notnull" />
<query operation="in" column="cate.category_srl" pipe="and">
<tables>
<table name="documents" alias="doc" />
</tables>
<columns>
<column name="doc.category_srl" />
</columns>
<conditions>
<query operation="in" column="doc.document_srl" pipe="and">
<tables>
<table name="document_extra_vars" alias="extra" />
</tables>
<columns>
<column name="extra.document_srl" />
</columns>
<conditions>
<condition operation="in" column="extra.module_srl" var="module_srl" notnull="notnull" pipe="and" />
<condition operation="in" column="extra.eid" var="var_ref" notnull="notnull" pipe="and" />
<condition operation="like_prefix" column="extra.value" var="var_ref_value" pipe="and" />
</conditions>
</query>
</conditions>
</query>
</conditions>
</query>

윤삼
Lv. 19
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
댓글 3
쿼리가 일단 condition에 해당되는 항목들은 대부분 index가 잡혀있어서 큰 문제는 없을 수 있으나 차라리 PHP에서 처리하는게 더 나을 수 있는 방식이 더 좋지 않을까 생각이 듣는데요..ㅎㅎ
그리고 해당 글수가 많아지면 많아질수록 count 전체갯수를 가져오는 쿼리는 상상이상으로 느려집니다. 그건 각오하셔요.
안 그래도 문서갯수 많아질수록 느려지는 느낌이에요;;;