SELECT DISTINCT, 인덱스가 완벽해도 전체 행을 스캔한다

SELECT DISTINCT, 인덱스가 완벽해도 전체 행을 스캔한다

  • Postgres의 SELECT DISTINCT는 인덱스를 어떻게 짜든 예측 조건에 맞는 모든 행을 스캔함. 실행 시간이 고유값 개수가 아니라 매칭 행 수에 따라 늘어남.
  • DBOS의 파티션 큐 워크로드에서 활성 파티션을 찾는 이 쿼리가 가장 비싼 질의였음. 파티션 10개를 고정하고 파티션당 행을 100에서 1M까지 늘린 벤치마크에서 지연시간이 행 수에 선형으로 증가함.
  • Postgres 질의 계획은 풀 인덱스 스캔을 선택해 1M 개 ENQUEUED 워크플로를 모두 읽고 겨우 3개 파티션 키를 찾아냄. 읽은 1M 행은 전부 낭비였음.
  • 파티션이 몇 개뿐인데 각 파티션에 워크플로가 쌓인 좁고 깊은 워크로드에선 쿼리가 1ms도 안 걸릴 것으로 예상했으나 실제로는 수 초가 걸림.
  • 파티션이 많고 파티션당 워크플로가 적은 넓고 얕은 워크로드에선 같은 쿼리가 예상대로 동작해 문제가 드러나지 않았음.

Hacker News opinions

결론은 맞는데 이건 이미 문서에 있는 내용임. DISTINCT는 결과를 먼저 정렬하거든. GROUP BY도 몰랐고 인덱스도 ANALYZE도 몰랐던 것 같음. Postgres 18의 새 skip scan 인덱싱이 도움이 될 수도 있고.

GROUP BY 쓰면 이게 해결되나? skip scan은 여기서 아무 역할도 안 한다고 글에 써 있음. 그리고 인덱스랑 질의 계획은 글에서 잔뜩 다루는데?

글을 읹긴 읽은 거냐? 쿼리에 완벽한 인덱스를 만들어 줬는데도 DISTINCT에는 skip scan이 안 쓰인다고 나옴.

Loose index scan이 정확히 이걸 위한 거임. MySQL 8.0에는 있고 Postgres에는 아직 없음.

그거 글에 써 있음. 이제는 그렇더라.

회사 공동창업자가 Postgres 창시자라는 게 솔직히 안 믃김. 새 내용이 하나도 없고 그냥 자기들이 직접 겪은 발견 수준임. 이런 쿼리는 어떻게 해도 안 커지는데, 이미 많이 투자했으면 DBA를 고용하고, 아직 초기면 데이터 모델링할 아키텍트를 고용하는 게 낫음.

안 커진다는 게 뭘로 스케일한다는 거임? 인덱스에 고유값 m개 있으면 이렇게 뽑는 데 m log(n)이면 데이터가 아무리 많아도 대부분 케이스에서 충분함.

그 사람 Stonebraker임. 필요 없는 사람한테 뭐 파는 전력이 있음.

난 요즘 SELECT DISTINCT 쓰이면 경고 신호로 본음. 유니크 제약을 제대로 못 짜서 뒤늦게 중복을 제거하려는 사람, join 조건 빠뜨린 사람, 한 번 효과 봤다고 도처에 다는 사람까지.

전체 row 비슷한 대상에 쓰면 확실히 경고 신호인데. 이 글 상황은 좀 다르지 않나?

DISTINCT 쓰지 말라는 충고는 예전부터 계속 있었는데, AI 시대에 와서 그 상식이 통째로 사라진 느낌임.

수동 우회로 질의 계획을 강제하는 게 답이라면, Postgres가 그 더 나은 계획을 알아서 짜게 해줘야지. 이게 프로젝트 안에 들어가 있어야 함.

해커뉴스
Drawgent 공개: Excalidraw 캔버스를 Claude Code·Codex·opencode에 연결하는 Rust 단일 바이너리룽손 LA664 CPU의 atomic add가 원자성을 잃고 업데이트 유실, 무한 루프를 만든 새 에라텀OpenAI 봇이 SEC·인구조사국 등 미국 정부 기관 사이트 접근해, 사용자 이미지 53건 외부 유출이란 것도 인정Reladraw, "A 오른쪽에" 말로 배치하는 다이어그램 언어 Show HN 등장멀렌웨그 해임 시도 33시간 만에 무산, Automattic 이사회 통째로 다시 짜였다하스켈 개발자 turion의 LLM 시대 생존법: 코드는 직접 쓰고 LLM은 검증에만 써라SponsorBlock 넣은 NewPipe 하드포크 PipePipe 화제, 뉴파이프 팀은Microsoft와 PC 제조사, Copilot+ PC 브랜드 사실상 폐기하고 Windows 11 AI PC 브랜딩 조용히 철수테트리스 조각 저작권 주장에 균열: 테트로미노는 1953년 수학자 솔로몬 골롬브가 먼저 공개iPod Nano 3G 낸드를 16GB로 교체 성공, 펌웨어 NAND ID 테이블과 Pwnage 2.0으로 부트로더 실행PG 마이그레이션 DDL을 브라우저에서 안전/위험 이진 판정… Cloudflare 출신 개발자의 safe-not-safe 공개Floci 출시: AWS·Azure·GCP·OCI를 24ms에 로컬에서 띄우는 MIT 라이선스 클라우드 에뮬레이터ASML 임원 발표: 유럽에는 반도체 제조 장비를 한 대도 팔지 않는다Jev 대안, LLM 토큰 확률만 뽑아 A/B/C 분류하는 단일 함수 래퍼 등장AI 코딩 끊은 개발자 회고: 20분짜리 작업을 에이전트 5분에 만들고 리뷰에 2일을 썼다잡스의 산책 한 마디로 태어난 애플 Cards 앱, 자외선 바코드와 1850년대 레터프레스 뒷이야기안드로이드 메신저 Conversations, 12년간 유지한 구글 플레이 유료 판매 접고 F-Droid 무료 배포로 전환CMU 교수의 실험: AI가 과제를 다 풀자 집에서 끝나는 평가를 전부 없앴다SELECT DISTINCT, 인덱스가 완벽해도 전체 행을 스캔한다LLVM 핵심 개발자 Johannes Doerfert 암으로 별세, 향년 36세아밋 사하이의 경고: AI가 내놓는 아이디어를 이해할 수학자, 세상에 훨씬 더 많이 필요해진다Ask HN에 모인 DOS 기계 생존기: 원자력 발전소의 AmigaOS 에뮬레이터부터 FAA 인증용 메인프레임 복제까지마이크로소프트, 소비자 AI 챗봇 경쟁 접고 기업용 단일 코파일럿으로 재편Flock 카메라 데이터 한 건에 무고한 여성 13일 구금, 그중 3일은 독방tptacek, Fly.io 떠나며 선언: 고정 기능 앱은 사라진다, 내 손으로 만드는 앱의 시대 오고 우리가 만드는 건 폰이다뉴멕시코 배심원단, 페이스북 이용자 기만 책임 인정…위반 200만 건 이상, 위반당 벌금 최대 $5,000엑셀, 셀 하나에 값 여러 개 담는 리스트와 중첩 배열 기능 베타 공개플랜 모드는 죽었다: Nuanced를 만든 개발자가 본 계획 인터페이스의 실패앨런 케이가 샤논 노이즈 채널 정리 이야기를 꺼내던 순간 줌 피드백으로 자기 목소리가 21초 늦게 겹쳐 들렸다Quanta 에세이: 중력이 공간 차원을 붕괴시키고 블랙홀 정보 역설을 푼 홀로그래픽 원리MIT 교수 5인이 캠퍼스 감시 확대를 애써 찬양하는 척 쓴 글, 읽다 보면 뒤집히는 풍자였다소형 결정 모델 Jev가 유튜브 라이브로 포켓몬스터 레드 깨는 중, 두꺼운 하니스 두고 워크스루 논쟁오픈AI 에이전트 700개가 Hugging Face 뚫은 방식, 링크 체인 8만 개로 전모 드러나Ollaya, Jev 스타일 결정 모델을 로컬에서 밀리초 만에 실행하는 오픈소스 런타임 공개팩토리오 초기 엔티티 65종 3D 프린팅용 STL 247개로 무료 공개, Prusa Research 협업 계기로 제작워싱턴DC 연방항소법원, 국방부의 앤스로픽 공급망 리스크 낙인 2대 1로 유지덴마크 필수 앱 4개에 묶인 개발자의 '스마트폰은 세금' 에세이, HN은 후반부 콘솔 광고에 실망Go 1.26·1.27, 어셈블리 없이 SIMD 쓰는 실험적 API 선보여Git 저장소 안에 이슈 데이터를 넣는 분산 버그 트래커 git-bug, 저자는 로드맵 공개하며 전업 고려SAFA, Avast 커널 드라이버 더블 페치(CVE-2025-13032)를 IORing 손상과 토큰 탈취로 이어 SYSTEM 탈취 성공Ink & Switch, 창립 10주년 맞아 인터랙티브 홈 페이지 'Tenfold' 공개: 10개 글자에 10년의 연구 담았다Oracle, 전력 미확보에도 뉴멕시코 데이터센터 투자자에 지급 의무 유지DHH, Rails World 2026에서 전문 프로그래머 은퇴 선언... 헤이 러스트+네이티브로 이탈, 올해 루비 비중 3%M6 맥 미니로 86Box 에뮬레이션, 펜티엄 II 600MHz와 Voodoo 3를 100% 속도 유지하며 구동, M4는 500MHz서 한계네덜란드 정부, MS 대체 목표로 NixOS 기반 DAWO 업무환경 공동 구축7인 8시간 판에서 벌어지는 배신... 1954년작 '디플로머시'가 우정 파괴 게임으로 불리는 이유 재조명트레일오브비츠, 에이전트로 만든 MASM 도구로 Miden VM에서 Falcon 서명 위조 취약점 발견미국 온천 1,723곳을 지열 흐름과 함께 찍은 인터랙티브 지도 공개SourceHut 빌드 로그 XSS로 계정 탈취, ansi2html의 OSC 8 링크 처리가 발단WaveDigger: Apple 위치 조회 API로 Wi-Fi BSSID와 기지국의 실제 좌표를 찾아내는 오픈소스 도구GPT-6·Opus 5.5로 뉴턴 연금술 원전 동정과 1941년 엔프igma-3 메시지 해독구글, 저궤도에 TPU 데이터센터 추진... 시제 위성으로 방사선·진동·냉각 한계 시험Opus 5.5가 URL을 30초 설명 영상 MP4로 렌더링, 영상 생성 모델 없이 가상 시계 seek과 libx264로 처리러스트 SIMD 라이브러리 fearless_simd 1.0 출시, unsafe 없이 인트린시크까지 안전하게devdotfast, YC W26 배치로 화이트보드 공개: vscode 기반 오픈소스 설계 IDE, 파일 편집은 미포함토요타, 역사상 최다 판매 코롤라에 첫 전기차 넣는다...250마일 이상 주행거리, 2028년형도쿄 골목에서 17년째 같은 자리에 서 있던 흰색 350Z, 현장 확인해 보니 차도 집도 사라지고 없었다DHH, Rails World 2026 키노트에서 손코딩의 끝 선언... 37signals는 Hey 백엔드 Rust 재작성으로 CPU 99.9% 절감간은 절반을 기증해도 몇 달 만에 재생, 저자는 몸의 취약함이 오히려 유리하다는 추측 이론 제시Times New Roman에 7번째마다 Arial을 끼워넣는 '저주받은 폰트' 생성기 Bastardica 나왔다몬키아일랜드의 그로그가 뮤터 잔을 35초 만에 녹이려면 무엇이 들어 있어야 하는가를 화학자가 부식 모델로 계산했다Z3의 릴레이 메모리에서 SRAM까지: 컴퓨터를 끌어올린 것은 '작업 기억'이다오라클, 뉴멕시코 '프로젝트 주피터' 데이터센터에 불가항력 통지로 지급 지연 시도GEO 조작으로 퍼뜨린 가짜 고객센터 번호, 구글 AI 개요가 항공사 공식 연락처로 출력해GitHub, 모방 소프트웨어 23일 방치하다 HN 프런트 노출 10분 만에 삭제신형 ESP32에 Sv32 MMU 탑재, 리눅스 구동하며 라즈베리파이와 격차 좁혀노키아 디자인 아카이브 알토대에 공개, 컨셉 모형과 발표 자료 755장 열람영국 정부의 비밀 명령으로 애플이 전 세계 iCloud 백도어 요구받아, 영국 신규 가입자는 ADP 영구 차단F-Droid 2.0 발표, 1년여 개발 끝에 10년 만의 최대 개편과 Kotlin Compose 재작성 단행스탠퍼드·엔비디아 CLM-8B 공개, 상태-행동 대조학습으로 Jev급 성능에 지연시간 최대 9배 짧고 DeepSWE 81.6% 기록폴란드 스타링크 지상국 방화 추정 화재, 위성 트래픽 중계하는 지상 게이트웨이가 표적KVM 게스트가 엔비디아 유저모드 드라이버 그대로 구동하는 virtio-nvgpu 공개, GPU 한 장을 최대 4게스트가 공유AI 에이전트, urlquery.net 우회해 호주 정부 사이트 등 3곳에 해킹 시도 정황스콧 젠슨, KDE 아카데미 2026에서 "데스크톱 UX 20년째 제자리"라며 WIMP 넘어선 실험 촉구Mercury 2.5 초당 781토큰 생성에 175개 모델 중 속도 2위, 지능 점수 12는 평균 이하OpenAI 에이전트가 호주 정부 의료통계 포털 침해, 알바니즈 총리 "9월 10일에야 통보받아 강한 실망"2003년 'Windows XP Box' 제작기 화제: XP와 레드햇 자동 듀얼 부팅한 초소형 PCarXiv, 독립 비영리 재단 출범 위해 Simons·XTX·Siegel 3곳에서 $17.2M 다년 기부 확보Tailscale, 패킷 복사 제거하고 멀티큐 도입해 데이터 평면 가속VSCode의 SSH 원격 개발은 원격에 Node 바이너리를 깔고 파일·셸·PTY를 맘대로 부리는 구조였다美 법무부, AI·데이터센터 반대 운동에 외국 대리인 규정하고 형사처벌 경고퀄컴, 스냅드래곤 X2에 리눅스 지원 추가... Hexagon NPU·Adreno GPU 드라이버 업스트림Radicle 노드 간 트래픽에 암호화와 인증이 없었다, 개발사가 비공개 저장소 사용 중단 권고英 RAF, 1년간 타국 위성 재밍해 왔다고 밝혀... 우주 방어 부대 'Space Effects Squadron' 창설앤스로픽, Claude가 2주 만에 claude.ai를 3.1배 빠르게 만든 방법 공개커리어 사이트 공고 28.3%가 90일 이상 표류, 4.2%는 마감 뒤 30일 안에 같은 자리로 재등장구글, Gemini 3.8 TTS 출시: 30초 샘플로 음성 복제, 배치 생성 시간당 $0.27시애틀 시의회, 식료품 개인화 가격 책정 금지법 통과... 미국 최초 도시 된다Claude가 찾아낸 파지 효소 ART, 크리스퍼형 반복 DNA 배열 품었지만 기능은 아직 미지GPT-6 Astra, LLM 주행 벤치마크에서 5분 22초 만에 완주... 경쟁 모델은 전부 DNFAI 성능 단위당 비용 분기마다 47% 하락, 질문당 $0.30에서 $0.0004로 725배 절감스트라이프, 사내 지식 에이전트 플랫폼 Kai 공개. 출시 2주 만에 전사 확산, 주간 활성 사용자 83%제어 흐름은 그대로 두고 데이터만 바꿔 RCE를 내는 공격, 도구 Einstein이 자동 생성한다토큰값이 1년에 여러 자릿수씩 하락, 글쓴이는 3-6년 내 프런티어급 LLM의 로컬 구동 전망문서는 위키 말고 /docs에 두라는 2022년 글, 깃허브 위키를 안티패턴으로 지목삼성 스마트 냉장고, 업데이트 배포 오류로 전원과 화면 멈추고 음식 상해사고 원인 설명을 끊은 엔지니어링 SVP "무엇을 바꾸는지 말해달라"텔레메트리 끄면 Claude Code가 AGENTS.md를 안 읽었다, 원격 플래그가 원인이고 2.1.281에서 수정Jev를 파이썬 25줄로 재현한 NobodyWho 글은 패러디였다, 확률은 선택 토큰 로짓에서 뽑아htmx 카슨 그로스 제안: 마크다운이 문서가 아니라 소스코드다, /src/md에 커밋하자