우리 조직에서는 WHERE 절을 제공하여 직원이 웹 응용 프로그램의 데이터를 필터링 할 필요가 있습니다. 큰 테이블이나 비효율적 인 조인에 풀 테이블 스캔을 요구하는 쿼리를 제공하는 사용자에 그것은 오랜 시간 동안 좋은 일,하지만 우리는 가끔 실행 등"합리적인"쿼리 만 사용
일부 광대과 같이 작성할 수 있습니다: 분명히
select * from big_table where
Name in (select name from some_table where name like '%search everything%')
or name in ('a', 'b', 'c')
or price < 20
or price > 40
or exists (select 1 from some_other_table where col1 + col2 + col3 = 4)
or exists (select 1 from table_a, table+b)
을, 이것은 계산 된 값, 색인화되지 않은 열, 많은 OR 및 table_a 및 table_b에 대한 제한되지 않은 조인으로 이러한 테이블을 쿼리하는 좋은 방법은 아닙니다.
하지만 사용자에게는 이것이 합리적 일 수 있습니다.
그렇다면 내부 사용자가 데이터베이스에 쿼리를 제공하면서 12 개의 테이블을 잠그지 않고 웹 서버를 5 분 동안 정지시키지 않도록하는 가장 좋은 방법은 무엇입니까?
나는 그것이 실행되기 전에 질의에 대한 실행 계획을 얻기 위해 C#/sql-server에서 프로그래밍 방식으로 생각하고 있습니다. 그렇다면 비용 요인은 무엇입니까? 예상 I/O 비용? 예상 CPU 비용은 얼마입니까? 사용자에게 쿼리가 좋지 않음을 알리는 합리적인 제한은 무엇입니까?
편집 : 우리는 시장 조사 회사입니다. 수천 개의 설문 조사가 있으며 각 설문 조사마다 자체 데이터가 있습니다. 우리는 수십명의 연구자가 그 데이터를 임의적으로 분할하고자합니다. GUI를 사용하여 "유효한"필터를 구성 할 수있는 도구가 있지만 일부 "고급 사용자"는 자체 쿼리를 제공하려고합니다. 이것이 표준이 아니거나 모범 사례는 아니지만, 수십 명의 사용자가 임의로 복잡한 조건과 끊임없이 변화하는 조건을 사용하여 원하는 행을 쿼리 할 수 있도록하는 방법은 무엇입니까?
고객과 WHERE 절을 작성하는 일종의 계층을 제안하는 답변 외에도 일반적인 쿼리에 대한보기를 설정하는 방법은 무엇입니까? – Zwergner
데이터웨어 하우스에 데이터를 복사하고 사용자가 안전한 곳에서 데이터를 분석하도록 할 것입니다. – CaffGeek