解讀SQL的select語句執(zhí)行順序_Mssql數(shù)據(jù)庫教程
推薦:解讀4個(gè)編寫SQL語句需要注意的常識(shí)1.盡量不要對列名進(jìn)行函數(shù)處理。而是針對后面的值進(jìn)行處理 例如wherecol1=-5的效率比where-col1=5的效率要高 因?yàn)楹竺娴臈l件對列值進(jìn)行了計(jì)算。這樣的條件下優(yōu)化器無法使用索引 而是要針對所有值進(jìn)行計(jì)算之后才能再比較 2.盡量使用和數(shù)劇列一樣的值進(jìn)行操作
一、sql語句的執(zhí)行步驟:1)語法分析,分析語句的語法是否符合規(guī)范,衡量語句中各表達(dá)式的意義。
2) 語義分析,檢查語句中涉及的所有數(shù)據(jù)庫對象是否存在,且用戶有相應(yīng)的權(quán)限。
3)視圖轉(zhuǎn)換,將涉及視圖的查詢語句轉(zhuǎn)換為相應(yīng)的對基表查詢語句。
4)表達(dá)式轉(zhuǎn)換, 將復(fù)雜的 SQL 表達(dá)式轉(zhuǎn)換為較簡單的等效連接表達(dá)式。
5)選擇優(yōu)化器,不同的優(yōu)化器一般產(chǎn)生不同的“執(zhí)行計(jì)劃”
6)選擇連接方式, ORACLE 有三種連接方式,對多表連接 ORACLE 可選擇適當(dāng)?shù)倪B接方式。
7)選擇連接順序, 對多表連接 ORACLE 選擇哪一對表先連接,選擇這兩表中哪個(gè)表做為源數(shù)據(jù)表。
8)選擇數(shù)據(jù)的搜索路徑,根據(jù)以上條件選擇合適的數(shù)據(jù)搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。
9)運(yùn)行“執(zhí)行計(jì)劃”
二、oracle 共享原理:
ORACLE將執(zhí)行過的SQL語句存放在內(nèi)存的共享池(shared buffer pool)中,可以被所有的數(shù)據(jù)庫用戶共享 當(dāng)你執(zhí)行一個(gè)SQL語句(有時(shí)被稱為一個(gè)游標(biāo))時(shí),如果它和之前的執(zhí)行過的語句完全相同, ORACLE就能很快獲得已經(jīng)被解析的語句以及最好的 執(zhí)行路徑. 這個(gè)功能大大地提高了SQL的執(zhí)行性能并節(jié)省了內(nèi)存的使用
三、oracle 語句提高查詢效率的方法:
1: where column in(select * from ... where ...); 2:... where exists (select 'X' from ...where ...); 第二種格式要遠(yuǎn)比第一種格式的效率高。在Oracle中可以幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢 使用EXIST,Oracle系統(tǒng)會(huì)首先檢查主查詢,然后運(yùn)行子查詢直到它找到第一個(gè)匹配項(xiàng),這就節(jié)省了時(shí)間 Oracle系統(tǒng)在執(zhí)行IN子查詢時(shí),首先執(zhí)行子查詢,并將獲得的結(jié)果列表存放在在一個(gè)加了索引的臨時(shí)表中 避免使用having字句 避免使用HAVING子句, HAVING 只會(huì)在檢索出所有記錄之后才對結(jié)果集進(jìn)行過濾. 這個(gè)處理需要排序,總計(jì)等操作. 如果能通過WHERE子句限制記錄的數(shù)目,那就能減少這方面的開銷
SQL Select語句完整的執(zhí)行順序:
1、from子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);
2、where子句基于指定的條件對記錄行進(jìn)行篩選;
3、group by子句將數(shù)據(jù)劃分為多個(gè)分組;
4、使用聚集函數(shù)進(jìn)行計(jì)算;
5、使用having子句篩選分組;
6、計(jì)算所有的表達(dá)式;
7、使用order by對結(jié)果集進(jìn)行排序。
分享:談值得收藏的SQL時(shí)間函數(shù)--日期轉(zhuǎn)換參數(shù) select CONVERT(varchar, getdate(), 120 )2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')20040912110608 select CONVERT(varchar(12) , getdate(), 111 )2004/09/12 selec
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 淺談SQL Server 2008數(shù)據(jù)挖掘查詢?nèi)蝿?wù)
- 如何有效防止Java程序源碼被人偷窺?
- 淺談選擇SQL Server恢復(fù)模型確保正確備份
- 解讀在SQL Server中處理空值時(shí)涉及的三個(gè)問題
- 解析SQL Server數(shù)據(jù)應(yīng)用在不同的數(shù)據(jù)庫中
- 防范sql注入式攻擊js版本
- Sql語句密碼驗(yàn)證的安全漏洞
- SQL新手教程:SQL SELECT 語句使用方法
- 解讀Oracle數(shù)據(jù)庫SQL語句性能調(diào)整的基本原則
- 談SQL Server 數(shù)據(jù)挖掘應(yīng)用于商業(yè)智能中
猜你也喜歡看這些
- 網(wǎng)站模板:利用Shell腳本實(shí)現(xiàn)遠(yuǎn)程MySQL自動(dòng)查詢
- Ubuntu下取消MySQL數(shù)據(jù)庫本機(jī)綁定限制方法
- MySQL數(shù)據(jù)庫備份和還原的常用命令
- 30種mysql優(yōu)化sql語句查詢的方法
- 用MyEclipse配置DataBase Explorer(圖示)
- Mysql字符集設(shè)置指南
- MySQL筆記之修改數(shù)據(jù)的解決方法
- MySQL與Oracle的語法區(qū)別詳細(xì)對比
- 基于mysql事務(wù)、視圖、存儲(chǔ)過程、觸發(fā)器的應(yīng)用分析
- Mysql select in 按id排序?qū)崿F(xiàn)方法
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-解讀SQL的select語句執(zhí)行順序
。