데이터 베이스 MySQL 튜토리얼 一个实例讲解MySQL查询优化(三)_MySQL

一个实例讲解MySQL查询优化(三)_MySQL

Jun 01, 2016 pm 01:59 PM
회사 어떻게 질문

实例分析
  下面我们举一个制造公司的例子来说明如何进行查询优化。制造公司数据库中包括3个表,模式如下所示:

  1.part表

  零件号     零件描述        其他列

  (part_num) (part_desc)      (other column)

  102,032   Seageat 30G disk     ……

  500,049   Novel 10M network card  ……

  ……

实例分析

  下面我们举一个制造公司的例子来说明如何进行查询优化。制造公司数据库中包括3个表,模式如下所示:

  1.part表

  零件号     零件描述        其他列

  (part_num) (part_desc)      (other column)

  102,032   Seageat 30G disk     ……

  500,049   Novel 10M network card  ……

  ……

  2.vendor表

  厂商号      厂商名      其他列

  (vendor _num) (vendor_name) (other column)

  910,257     Seageat Corp   ……

  523,045     IBM Corp     ……

  ……

  3.parven表

  零件号     厂商号     零件数量

  (part_num) (vendor_num) (part_amount)

  102,032    910,257    3,450,000

  234,423    321,001    4,000,000

  ……

  下面的查询将在这些表上定期运行,并产生关于所有零件数量的报表:

  SELECT part_desc,vendor_name,part_amount

  FROM part,vendor,parven

  WHERE part.part_num=parven.part_num

  AND parven.vendor_num = vendor.vendor_num

  ORDER BY part.part_num

  如果不建立索引,上述查询代码的开销将十分巨大。为此,我们在零件号和厂商号上建立索引。索引的建立避免了在嵌套中反复扫描。关于表与索引的统计信息如下:

  表     行尺寸   行数量     每页行数量   数据页数量

  (table) (row size) (Row count) (Rows/Pages) (Data Pages)

  part    150     10,000    25       400

  Vendor   150     1,000     25       40

  Parven   13      15,000    300       50

  索引     键尺寸   每页键数量   页面数量

  (Indexes) (Key Size) (Keys/Page)   (Leaf Pages)

  part     4      500       20

  Vendor    4      500       2

  Parven    8      250       60

  看起来是个相对简单的3表连接,但是其查询开销是很大的。通过查看系统表可以看到,在part_num上和vendor_num上有簇索引,因此索引是按照物理顺序存放的。parven表没有特定的存放次序。这些表的大小说明从缓冲页中非顺序存取的成功率很小。此语句的优化查询规划是:首先从part中顺序读取400页,然后再对parven表非顺序存取1万次,每次2页(一个索引页、一个数据页),总计2万个磁盘页,最后对vendor表非顺序存取1.5万次,合3万个磁盘页。可以看出在这个索引好的连接上花费的磁盘存取为5.04万次。

  实际上,我们可以通过使用临时表分3个步骤来提高查询效率:

  1.从parven表中按vendor_num的次序读数据:

  SELECT part_num,vendor_num,price

  FROM parven

  ORDER BY vendor_num

  INTO temp pv_by_vn

  这个语句顺序读parven(50页),写一个临时表(50页),并排序。假定排序的开销为200页,总共是300页。

  2.把临时表和vendor表连接,把结果输出到一个临时表,并按part_num排序:

  SELECT pv_by_vn,* vendor.vendor_num

  FROM pv_by_vn,vendor

  WHERE pv_by_vn.vendor_num=vendor.vendor_num

  ORDER BY pv_by_vn.part_num

  INTO TMP pvvn_by_pn

  DROP TABLE pv_by_vn

  这个查询读取pv_by_vn(50页),它通过索引存取vendor表1.5万次,但由于按vendor_num次序排列,实际上只是通过索引顺序地读vendor表(40+2=42页),输出的表每页约95行,共160页。写并存取这些页引发5*160=800次的读写,索引共读写892页。

  3.把输出和part连接得到最后的结果:

  SELECT pvvn_by_pn.*,part.part_desc

  FROM pvvn_by_pn,part

  WHERE pvvn_by_pn.part_num=part.part_num

  DROP TABLE pvvn_by_pn

  这样,查询顺序地读pvvn_by_pn(160页),通过索引读part表1.5万次,由于建有索引,所以实际上进行1772次磁盘读写,优化比例为30∶1。笔者在Informix Dynamic

  Sever上做同样的实验,发现在时间耗费上的优化比例为5∶1(如果增加数据量,比例可能会更大)。

  小结

  20%的代码用去了80%的时间,这是程序设计中的一个着名定律,在数据库应用程序中也同样如此。我们的优化要抓住关键问题,对于数据库应用程序来说,重点在于SQL的执行效率。查询优化的重点环节是使得数据库服务器少从磁盘中读数据以及顺序读页而不是非顺序读页。

 

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

12306 항공권 구매 내역 확인 방법 항공권 구매 내역 확인 방법 12306 항공권 구매 내역 확인 방법 항공권 구매 내역 확인 방법 Mar 28, 2024 pm 03:11 PM

12306 티켓 예매 앱의 최신 버전을 다운로드하세요. 모두가 매우 만족하는 여행 티켓 구매 소프트웨어입니다. 소프트웨어에서 제공되는 다양한 티켓 소스가 있어 매우 편리합니다. - 실명인증으로 온라인 구매가 가능합니다. 모든 사용자가 쉽게 여행티켓과 항공권을 구매하고 다양한 할인 혜택을 누릴 수 있습니다. 또한 사전에 예약하고 티켓을 얻을 수도 있습니다. 호텔을 예약하거나 차량으로 픽업 및 하차할 수도 있습니다. 한 번의 클릭으로 원하는 곳으로 이동하고 티켓을 구매할 수 있어 여행이 더욱 간편해지고 편리해집니다. 모든 사람의 여행 경험이 더욱 편안해졌습니다. 이제 편집자가 온라인으로 자세히 설명합니다. 12306명의 사용자에게 과거 티켓 구매 기록을 볼 수 있는 방법을 제공합니다. 1. 철도 12306을 열고 오른쪽 하단의 My를 클릭한 후 My Order를 클릭합니다. 2. 주문 페이지에서 Paid를 클릭합니다. 3. 유료페이지에서

Xuexin.com에서 학업 자격을 확인하는 방법 Xuexin.com에서 학업 자격을 확인하는 방법 Mar 28, 2024 pm 04:31 PM

Xuexin.com에서 내 학업 자격을 어떻게 확인하나요? Xuexin.com에서 학업 자격을 확인할 수 있습니다. 많은 사용자가 Xuexin.com에서 학업 자격을 확인하는 방법을 모릅니다. 다음으로 편집자는 Xuexin.com에서 학업 자격을 확인하는 방법에 대한 그래픽 튜토리얼을 제공합니다. 유저들이 와서 구경해 보세요! Xuexin.com 사용 튜토리얼: Xuexin.com에서 학업 자격을 확인하는 방법 1. Xuexin.com 입구: https://www.chsi.com.cn/ 2. 웹사이트 쿼리: 1단계: Xuexin.com 주소를 클릭합니다. 위의 홈페이지에 들어가려면 [교육 쿼리]를 클릭합니다. 2단계: 최신 웹페이지에서 아래 그림의 화살표와 같이 [쿼리]를 클릭합니다. 3단계: 새 페이지에서 [학점 파일에 로그인]을 클릭합니다. 4단계: 로그인 페이지에서 정보를 입력하고 [로그인]을 클릭합니다.

Blue Star Travel Yao는 어느 회사에 속해 있나요? Blue Star Travel Yao는 어느 회사에 속해 있나요? Mar 22, 2024 pm 03:41 PM

Blue Star Travel Ballad는 최근 프로모션 비디오가 공개된 이후 게임 인기 목록에 올랐습니다. 실제로 Blue Star Travel Ballad는 상하이 2D 제조업체 Manjiu의 새로운 게임입니다. 아래에서 편집자가 설명해 드리겠습니다. Blue Star Yuanluyao Game Company에 대한 소개입니다. 오셔서 함께 살펴보세요. Blue Star Travel Yao는 어느 회사에서 왔나요? 답변: Manjiu Network에서 출시했습니다. 1. 먼저 블루스타여행 야오(Blue Star Travel Yao)는 만주의 빅월드 RPG에서 출시한 게임으로 지난 3월 20일 홍보영상이 공개됐다. 2. 이 제품은 2023년 10월에 버전 번호를 받게 됩니다. 게임의 상표와 운영 단위는 모두 2023년 2월에 설립된 회사 이름으로 등록되어 있으며, 공식 홈페이지에는 본사가 싱가포르에 있다고 나와 있습니다. 3. 이번에 공개된 11분 분량의 홍보영상에서는 이런 내용이 공개됐다.

MySQL과 PL/SQL의 유사점과 차이점 비교 MySQL과 PL/SQL의 유사점과 차이점 비교 Mar 16, 2024 am 11:15 AM

MySQL과 PL/SQL은 각각 관계형 데이터베이스와 절차적 언어의 특성을 나타내는 서로 다른 두 가지 데이터베이스 관리 시스템입니다. 이 기사에서는 구체적인 코드 예제를 통해 MySQL과 PL/SQL 간의 유사점과 차이점을 비교합니다. MySQL은 SQL(구조적 쿼리 언어)을 사용하여 데이터베이스를 관리하고 운영하는 인기 있는 관계형 데이터베이스 관리 시스템입니다. PL/SQL은 Oracle 데이터베이스 고유의 절차적 언어로 저장 프로시저, 트리거, 함수 등의 데이터베이스 개체를 작성하는 데 사용됩니다. 같은

Hands 앱은 어느 회사의 제품인가요? Hands 앱은 어느 회사의 제품인가요? Mar 13, 2024 am 11:10 AM

Hands-on-hand는 새로운 채팅 및 데이트 소프트웨어인데, Hand-on-hand 앱은 어떤 회사인가요? 이 소프트웨어는 Tianjin Laifu Cultural Development Co., Ltd.에서 제작했습니다. Xiaomi Mall 및 Apple Mall에서 다운로드할 수 있습니다. Hands-on 앱 제작 회사 소개에서는 구체적인 방법을 알려드릴 수 있으니, 아래에서 자세히 소개하고 있으니 한번 살펴보세요. Qianshou 앱은 어느 회사입니까? 답변: Tianjin Laifu Cultural Development Co., Ltd. 자세한 설명: 공식 소프트웨어 웹사이트 https://www.qianshouapp.cn/ 하단에서 회사 이름을 확인할 수 있습니다. 소프트웨어 소개: 1. 사용자가 원하는 조건에 따라 필터링할 수 있으며 필요한 개체를 더 빨리 찾을 수 있습니다. 2. 사용자가 필요한 개체를 더 빠르게 검색하는 데 도움이 될 수 있습니다.

Apple 휴대폰의 활성화 날짜를 확인하는 방법 Apple 휴대폰의 활성화 날짜를 확인하는 방법 Mar 08, 2024 pm 04:07 PM

애플 휴대폰을 이용하여 개통일을 확인하고 싶다면 휴대폰에 있는 일련번호를 통해 확인하는 것이 가장 좋은 방법이며, 애플 공식 홈페이지를 방문하여 컴퓨터에 연결한 후 세 번째 다운로드를 통해 확인할 수도 있습니다. - 그것을 확인하는 파티 소프트웨어. Apple 휴대폰의 활성화 날짜를 확인하는 방법은 무엇입니까? 답변: 일련번호 쿼리, Apple 공식 웹사이트 쿼리, 컴퓨터 쿼리, 타사 소프트웨어 쿼리 1. 사용자가 휴대폰의 일련번호를 아는 것이 가장 좋습니다. 설정, 일반, 이 기기 정보를 열어 일련번호를 확인할 수 있습니다. 2. 일련번호를 이용하면 휴대폰 개통일뿐만 아니라 휴대폰 버전, 휴대폰 원산지, 휴대폰 공장일 등을 확인할 수 있습니다. 3. 사용자는 Apple의 공식 웹 사이트를 방문하여 기술 지원을 찾고, 페이지 하단의 서비스 및 수리 열을 찾아 거기에서 iPhone 활성화 정보를 확인합니다. 4. 사용자

Oracle을 사용하여 테이블이 잠겨 있는지 쿼리하는 방법은 무엇입니까? Oracle을 사용하여 테이블이 잠겨 있는지 쿼리하는 방법은 무엇입니까? Mar 06, 2024 am 11:54 AM

제목: Oracle을 사용하여 테이블이 잠겨 있는지 쿼리하는 방법은 무엇입니까? Oracle 데이터베이스에서 테이블 잠금은 트랜잭션이 테이블에 쓰기 작업을 수행할 때 다른 트랜잭션이 테이블에 쓰기 작업을 수행하거나 테이블에 구조적 변경(예: 열 추가, 행 삭제)을 수행하려고 할 때 차단된다는 것을 의미합니다. , 등.). 실제 개발 과정에서 관련 문제를 더 잘 해결하고 처리하기 위해 테이블이 잠겨 있는지 쿼리해야 하는 경우가 종종 있습니다. 이 기사에서는 Oracle 문을 사용하여 테이블이 잠겨 있는지 쿼리하는 방법을 소개하고 특정 코드 예제를 제공합니다. 테이블이 잠겨 있는지 확인하려면

Black Shark 휴대폰 뒤에 숨은 회사의 미스터리를 탐험해보세요 Black Shark 휴대폰 뒤에 숨은 회사의 미스터리를 탐험해보세요 Mar 24, 2024 pm 10:15 PM

세간의 이목을 끄는 기술 회사인 Black Shark 휴대폰은 강력한 성능과 궁극의 게임 경험으로 항상 주목을 받아왔습니다. 그러나 제품 자체 외에도 Black Shark의 배후에 있는 회사는 미스터리에 싸여 있습니다. 이 기사에서는 Black Shark 휴대폰 뒤에 있는 회사의 미스터리를 밝히고 개발 역사와 미래 전망을 탐구하려고 합니다. Black Shark 휴대폰의 모회사는 2017년에 설립된 Beijing Black Shark Technology Co., Ltd.입니다. 회사의 창립자들은 기술 산업의 경험이 풍부한 실무자이며 많은 유명 기술 회사에서 고위직을 역임했습니다. Black Shark Technology는 처음부터

See all articles