최근에 SQL이 끔찍한 언어라는 말을 많이 들었고 태양 아래 모든 프레임 워크가 데이터베이스 추상화 계층으로 미리 패키지 된 것 같습니다.
이러한 레이어는 자신의 항목을 SQL
. 대부분의 데이터베이스 공급 업체 SQL
는 엔진과 통신하는 유일한 방법입니다.
하지만 내 경험상 SQL은 데이터 입력 및 출력을 관리하는 훨씬 쉽고 다재다능하며 프로그래머 친화적 인 방법 인 경우가 많습니다. 내가 사용한 모든 추상화 계층은 실질적인 이점이없는 현저히 제한된 접근 방식 인 것 같습니다.
… 위에서 설명한 이유입니다.
데이터베이스 레이어는 아무것도 추가 하지 않고 제한 합니다. 그들은 질의를 더 간단하게 만들지 만 결코 더 효율적이지 않습니다.
정의에 따라 .NET Framework에없는 데이터베이스 레이어에는 아무것도 없습니다 SQL
.
어떻게 만드는 SQL
끔찍한, 그리고 왜 데이터베이스 추상화 레이어는 가치가있다?
SQL
좋은 언어이지만 함께 작동하려면 약간의 두뇌가 필요합니다.
이론적으로 SQL
는 선언적입니다. 즉, 원하는 것을 선언하고 엔진이 가능한 가장 빠른 방법으로이를 제공합니다.
실제로 올바른 쿼리 (올바른 결과를 반환하는 쿼리)를 공식화하는 방법에는 여러 가지가 있습니다.
옵티마이 저는 미리 정의 된 일부 알고리즘 (예, 여러 알고리즘)으로 레고 성을 구축 할 수 있지만 새 알고리즘을 만들 수는 없습니다. SQL
이를 지원 하려면 여전히 개발자가 필요 합니다.
그러나 일부 사람들은 최적화 프로그램이 "주어진 SQL
엔진 구현으로이 쿼리에 사용할 수있는 최상의 계획"이 아니라 "가능한 최상의 계획"을 생성 할 것으로 기대합니다 .
그리고 우리 모두 알다시피, 컴퓨터 프로그램이 사람들의 기대를 충족시키지 못할 때 비난받는 것은 기대가 아니라 프로그램입니다.
그러나 대부분의 경우 쿼리를 재구성하면 실제로 가능한 최상의 계획을 생성 할 수 있습니다. 불가능한 작업이 있지만 SQL
이러한 사례에 대한 새롭고 개선 된 개선 사항 이 점점 더 적어지고 있습니다.
그러나 공급 업체가 "인덱스 범위 가져 오기", "행 가져 오기"등과 같은 기능에 대한 낮은 수준의 액세스를 제공한다면 좋을 것입니다 rowid
. C
컴파일러를 사용하면 어셈블리를 언어에 바로 포함 할 수 있습니다.
나는 최근에 내 블로그에 이것에 대한 기사를 썼다.