limit(10)이 이미 그렇게 처리할 것입니다 ![]()
이런 방식으로 처리할 수 있습니다: (하지만 테스트는 하지 않았습니다)
Topic.where("category_id in (?)", [cat_id])
.where("closed = ?", false)
.joins("LEFT JOIN topic_custom_fields import_tcf ON import_tcf.topic_id = topic.id AND topic_custom_fields.name = 'importedSortDate'")
.order("TIMESTAMP import_tcf.value")
.order("created_at desc")
.limit(10)
문제는 포스트그레SQL에 날짜 문자열을 타임스탬프로 캐스팅하도록 요청하는 것이 매우 비효율적이라는 점입니다. 모든 주제에 대해 먼저 변환을 수행한 후, 첫 번째 10개를 선택해야 하기 때문입니다.
여기서 몇 가지 옵션이 생각납니다 - ISO8601 대신 날짜를 "epoch 이후 초"로 저장할 수 있습니다. 그러면 포스트그레SQL이 정렬하는 것이 훨씬 쉬워집니다. 또는 데이터베이스 마이그레이션을 사용하여 topic_custom_fields 테이블에 TIMESTAMP value 인덱스를 추가할 수도 있습니다.