Oracle调优专家秘籍
第二:SQL的优化永远只针对大表之间的连接才用得上。不要怀疑,首先,我说的大表是指包含大表,不管是大表与大表,还是大表与小表
注:本文不是给你一个案例,而是讲调优的方法,古人云:授人鱼不如授人渔,这里要讲的,就是教你怎么捕鱼。
这里要说的sql调优很有意思,得先从感恩节说起。
感恩节(英语:Thanksgiving Day)是美国和加拿大共有的节日,由美国人民独创,原意是为了感谢上天赐予的好收成。11月的第四个星期四是感恩节。感恩节是美国人民独创的一个古老节日,也是美国人合家欢聚的节日,因此美国人提起感恩节总是备感亲切。感恩节是美国国定假日中最地道、最美国式的节日。
感恩节之后的第一天,是星期五,在这一天,美国人有疯狂购物的习惯,所以被称之为黑色星期五,近来己经由传统的商场购物改为网上购物,所以我的愕运便由此而生,我的DB便在这一天被疯狂购物给访问爆了。
客户提供了一份高峰时段的AWR报告,仔细分析后,发现竟然是一条高耗CPU的SQL给整跨了,仅仅一条,占了85%的CPU,这才深入去了解了SQL的优化,以前也做过DB的一些优化,基本上通过分析表、建索引、调参数、打PATCH等等都能解决,但这次,持续了一周,学了几天,还没解决。最终决定潜心研究SQL的优化,得出以下几点关于优化的结论:
第 一:1/9原则,引用Oracle大牛Tom大师的原话:数据库中90%的性能问题都可以由调整10%的SQL语句来解决。
Tom say: Sql tuning constitute a good 90 percent or more of the effort. Thats right; before we even get the DBAs involved, we the developers have done 90 percent of the work. This is why I think most people do not understand database tuning.
第二:SQL的优化永远只针对大表之间的连接才用得上。不要怀疑,,首先,我说的大表是指包含大表,不管是大表与大表,还是大表与小表,只要是有大表就行,因为小表与小表之间不会出现性能问题;其次:有连接才有优化的价值,我真的不知道单表的SQL有什么优化可言,对单表查询无非是三点:全表/索引/分区表,这三点,你肯定会。
第 三:说第三条之间,先说明:正如前面两条所言,数据库90%的优化在SQL,SQL的优化关键在“大表连接”,所以下面说的SQL优化都是指大表连接。
SQL的执行中,Oracle提供的执行计划,不是什么神秘的东西,其实就是oracle去表中查找我们所需结果的一个算法,算法这东西太熟了,在大学《数据结构》这门课中就学过(惭愧,这堂课从来都是去睡觉,因为当时根本不知道那位老朽在说什么),算法就是运算过程,在这里,就是指查找路径,说白了:执行计划=算法=查找路径,要找最优的执行计划,就是要找出最优算法,最优算法熟吧? 不熟我跟你说几个名词:"冒泡算法",“折中算法”,“快速查找”,去过软件公司面试的人很多人肯定都做过这种题。而Oracle提供的执行计划中,恰恰就提供这些详细的过程在里面。你能看到Oracle先去哪个表/索引拿数据、根据什么条件拿多少行,再把拿到的结果去连接哪个表、等等,经过一系列的运算,最后得出什么结果给你。
但是,ORACLE也是一款软件,不是神,你给它一条SQL,它在开始运算之前,是不知道哪种算法是最优的,不可能每个都试一遍,再做比较吧,而且每条语句的执行计划上百种,每条语句都执行上百次,那服务器干脆别活了。所以,它只能预估一种针对这条SQL认为最优的算法,然后去执行。请注意:
1.永远没有最优算法,如果有最优算法a,那优化还需要做吗?每次都按最优算法a做行了。
2. Oracle认为最优的算法也不一定是最优算法,如果是的话,我们还需要做吗?
说到这里:我们就明白了,ORACLE调优的90%=SQL调优=大表连接调优=执行计划调优=算法调优,而大表连接就2点:1.连接顺序。2.连接算法(嵌套/哈希/合并)。
结论:SQL的调优就是手动设计出最优连接顺序和算法的执行计划。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

oracle查看表屬於哪個表空間的方法:1、使用「SELECT」語句,並透過指定表名來查找指定表所屬的表空間;2、使用Oracle提供的資料庫管理工具來查看表所屬的表空間,這些工具通常提供了圖形介面,使得操作更加直覺和方便;3、在SQL*Plus中,可以透過輸入「DESCRIBEyour_table_name;」命令來查看表所屬的表空間。

如何使用PDO連接到Oracle資料庫概述:PDO(PHPDataObjects)是PHP中一個操作資料庫的擴充庫,它提供了一個統一的API來存取多種類型的資料庫。在本文中,我們將討論如何使用PDO連接到Oracle資料庫,並執行一些常見的資料庫操作。步驟:安裝Oracle資料庫驅動擴充功能在使用PDO連接Oracle資料庫之前,我們需要安裝對應的Oracl

oracle只取一條重複的數據的步驟:1、使用SELECT語句結合GROUP BY和HAVING子句來查找重複數據;2、使用ROWID刪除重複數據,可以確保刪除的是精確的重複數據記錄,或者使用「ROW_NUMBER ()」函數刪除重複數據,這將刪除每組重複資料中的除了第一筆記錄之外的其他記錄;3、使用「select count(*) from」語句傳回刪除記錄數確保結果。

如何使用PHP擴充PDO連接Oracle資料庫導語:PHP是一種非常流行的伺服器端程式語言,而Oracle是一款常用的關係型資料庫管理系統。本文將介紹如何使用PHP擴充PDO(PHPDataObjects)來連接Oracle資料庫。一、安裝PDO_OCI擴充要連接Oracle資料庫,首先需要安裝PDO_OCI擴充。以下是安裝PDO_OCI擴充的步驟:確保

實作PHP和Oracle資料庫的資料匯入在Web開發中,使用PHP作為伺服器端腳本語言可以方便地操作資料庫。 Oracle資料庫作為一種常見的關聯式資料庫管理系統,具備強大的資料儲存與處理能力。本文將介紹如何使用PHP將資料匯入Oracle資料庫中,並給出對應的程式碼範例。首先,我們需要確保已經安裝了PHP和Oracle資料庫,並且已經配置了PHP對Orac

oracle查詢表空間大小步驟:1.使用資料庫管理員帳號登入Oracle資料庫;2、使用「SELECT」語句來查看空間清單;3、查詢表空間大小有3種方法:使用dbms_utility包查詢、使用dba_segments視圖查詢、使用dba_data_files檢視查詢;4、使用「DBMS_OUTPUT.PUT_LINE」函數或其他顯示結果的方法來顯示查詢結果。

oracle資料庫需要jdk,原因是:1、使用特定的軟體或功能時需要包含在JDK中的其他軟體或函式庫;2、需要安裝Java JDK才能在Oracle資料庫中執行Java程式;3、JDK提供了開發和編譯Java應用程式的功能;4、滿足Oracle對Java函數的要求,以幫助實現和實現特定功能。

如何有效率地使用PHP和Oracle資料庫的連接池引言:在開發PHP應用程式時,使用資料庫是不可或缺的一部分。而在與Oracle資料庫互動時,連接池的使用對於提高應用程式的效能和效率至關重要。本文將介紹如何在PHP中有效地使用Oracle資料庫連接池,並提供對應的程式碼範例。一、連接池的概念及優勢連接池是一種管理資料庫連接的技術,它透過事先創建一批連接並維護一個
