Heim Datenbank MySQL-Tutorial Oracle中SQL语句运行过程的深度解析

Oracle中SQL语句运行过程的深度解析

Jun 07, 2016 pm 05:06 PM
oracle数据库

最近项目做完了(也许并不能说做完了),但是出现了一个致命的障碍,就是性能。现在想想TOP的作者是讲的是多么的精辟,性能是贯穿

最近项目做完了(也许并不能说做完了),但是出现了一个致命的障碍,就是性能。现在想想TOP的作者是讲的是多么的精辟,性能是贯穿在项目需求,项目分析设计,项目编码和单元测试、集成等各个阶段。而不是等项目开发完毕,再来考虑性能问题。但是,事实已是如此。所以,最近先从SQL语句开始优化, 为了更好地优化SQL,那么首先自然需要知道Oracle中的SQL引擎对一条给定的SQL语句,他都做了哪些鲜为人知的事情。本文为个人学习总结,仅作学习记录,其中不妥或者错误之处,敬请指出,本人感激不尽!

为了延续TOP中从Cursor开始说明,这里的Cursor并非PL/SQL中的Cursor,至于这个Cursor是什么,怎么用中文解释,暂时还不清楚。但是我想他其实是一个概念性的东西,代表了SQL在不同环境中的称谓。顽皮点地说,当一条SQL语句进入了SQL引擎,其就被Cursor了。下面看一张TOP上的Cursor的生命周期:


1:Open Cursor:在本次会话的服务器进程的私有内存UGA(User Global Area)中会开辟一个内存区给这个Cursor。此时,SQL语句还没有和该Cursor相关联。

2:Parse Cursor:这个过程就会让SQL语句和Cursor相关联了。这个步骤就是通常意义的SQL解析,最后将执行计划存入共享区。然后UGA中的Cursor会用一个指针指向共享区的一个可共享的Cursor。

3:Define output variables:定义输出变量主要是对于查询和使用了returning语法的insert,update,和delete语句。

4:Bind input variables:如果SQL使用了绑定变量,,则这里需要获取绑定变量的值。

5:Execute cursor:执行,但是SQL语句真正的执行往往会延迟到下个步骤。

6:Fetch cursor:如果sql返回数据,则这里获取返回的数据。

7:Close cursor:关闭cursor,释放UGA中占用的资源。但是共享区中的cursor并不会释放。

在上面这个过程中,对于我们关心的SQL语句的解析,一笔带过。下面继续分析第二个步骤Parse Cursor。对于SQL语句的解析,早就听说是软解析和硬解析,下面我们分析下整个解析的过程:

linux

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So überprüfen Sie, zu welchem ​​Tabellenbereich eine Tabelle in Oracle gehört So überprüfen Sie, zu welchem ​​Tabellenbereich eine Tabelle in Oracle gehört Jul 06, 2023 pm 01:31 PM

So überprüfen Sie, zu welchem ​​Tabellenbereich eine Tabelle in Oracle gehört

So stellen Sie mithilfe von PDO eine Verbindung zur Oracle-Datenbank her So stellen Sie mithilfe von PDO eine Verbindung zur Oracle-Datenbank her Jul 28, 2023 pm 12:48 PM

So stellen Sie mithilfe von PDO eine Verbindung zur Oracle-Datenbank her

So rufen Sie nur ein Stück doppelter Daten in Oracle ab So rufen Sie nur ein Stück doppelter Daten in Oracle ab Jul 06, 2023 am 11:45 AM

So rufen Sie nur ein Stück doppelter Daten in Oracle ab

Implementieren Sie den Datenimport in PHP- und Oracle-Datenbanken Implementieren Sie den Datenimport in PHP- und Oracle-Datenbanken Jul 12, 2023 pm 06:46 PM

Implementieren Sie den Datenimport in PHP- und Oracle-Datenbanken

Wie Oracle ermittelt, ob eine Tabelle in einer gespeicherten Prozedur vorhanden ist Wie Oracle ermittelt, ob eine Tabelle in einer gespeicherten Prozedur vorhanden ist Jul 06, 2023 pm 01:20 PM

Wie Oracle ermittelt, ob eine Tabelle in einer gespeicherten Prozedur vorhanden ist

Benötigt die Oracle-Datenbank JDK? Benötigt die Oracle-Datenbank JDK? Jun 05, 2023 pm 05:06 PM

Benötigt die Oracle-Datenbank JDK?

So nutzen Sie PHP- und Oracle-Datenbankverbindungspools effizient So nutzen Sie PHP- und Oracle-Datenbankverbindungspools effizient Jul 12, 2023 am 10:07 AM

So nutzen Sie PHP- und Oracle-Datenbankverbindungspools effizient

Welche Datentypen gibt es bei Oracle? Welche Datentypen gibt es bei Oracle? Jun 05, 2023 am 11:40 AM

Welche Datentypen gibt es bei Oracle?

See all articles