• <nav id="kggui"></nav>
  • <optgroup id="kggui"></optgroup>
  • <menu id="kggui"></menu><xmp id="kggui"><nav id="kggui"></nav>
    <menu id="kggui"><menu id="kggui"></menu></menu>
    <nav id="kggui"></nav>

    數據庫語句執行

    怎樣優化SQL語句的執行

    環境:oracle 817 + linux + 陣列柜 swd_billdetail 表5000萬條數據 SUPER_USER 表2800條數據 連接列上都有索引,而且super_user中的一條對應于swd_billdetail表中的很多條記錄表與索引都做了分析。

    實際應用的查詢為: select a。CHANNEL, B。

    user_class from swd_billdetail B, SUPER_USER A where A。cn = B。

    cn; 這樣在分析時導致查詢出的數據過多,不方便,所以用count(a。 CHANNEL||B。

    user_class)來代替,而且count(a。CHANNEL||B。

    user_class)操作本身并不占用過多的時間,所以可以接受此種替代。 利用索引查詢出SWD_BILLDETAIL表中所有記錄的方法 SQL> select count(id) from SWD_BILLDETAIL; COUNT(ID) ---------- 53923574 Elapsed: 00:02:166。

    00 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=18051 Card=1) 1 0 SORT (AGGREGATE) 2 1 INDEX (FAST FULL SCAN) OF 'SYS_C001851' (UNIQUE) (Cost=18051 Card=54863946) Statistics ---------------------------------------------------------- 0 recursive calls 1952 db block gets 158776 consistent gets 158779 physical reads 1004 redo size 295 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 1 rows processed 利用全表掃描從SWD_BILLDETAIL表中取出全部數據的方法。 SQL> select count(user_class) from swd_billdetail; COUNT(USER_CLASS) ----------------- 53923574 Elapsed: 00:11:703。

    07 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=165412 Card=1 Bytes=2) 1 0 SORT (AGGREGATE) 2 1 TABLE ACCESS (FULL) OF 'SWD_BILLDETAIL' (Cost=165412 Card=54863946 Bytes=109727892) Statistics ---------------------------------------------------------- 0 recursive calls 8823 db block gets 1431070 consistent gets 1419520 physical reads 0 redo size 303 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 1 rows processed select count(a。 CHANNEL||B。

    user_class) from swd_billdetail B, SUPER_USER A where A。cn = B。

    cn; EXEC_ORDER PLANLINE ---------- ----------------------------------------------------------------------------------------------------------- 6 SELECT STATEMENT OPT_MODE:CHOOSE (COST=108968,CARD=1,BYTES=21) 5 SORT (AGGREGATE) (COST=,CARD=1,BYTES=21) 4 NESTED LOOPS (COST=108968,CARD=1213745,BYTES=25488645) 1 TABLE ACCESS (FULL) OF 'SWORD。 SUPER_USER' (COST=2,CARD=2794,BYTES=27940) 3 TABLE ACCESS (BY INDEX ROWID) OF 'SWORD。

    SWD_BILLDETAIL' (COST=39,CARD=54863946,BYTES=603503406) 2 INDEX (RANGE SCAN) OF 'SWORD。 IDX_DETAIL_CN' (NON-UNIQUE) (COST=3,CARD=54863946,BYTES=) 這個查詢耗費的時間很長,需要1個多小時。

    運行后的信息如下: COUNT(A。CHANNEL||B。

    USER_CLASS) ------------------------------ 1186387 Elapsed: 01:107:6429。 87 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=108968 Card=1 Bytes=21) 1 0 SORT (AGGREGATE) 2 1 NESTED LOOPS (Cost=108968 Card=1213745 Bytes=25488645) 3 2 TABLE ACCESS (FULL) OF 'SUPER_USER' (Cost=2 Card=2794Bytes=27940) 4 2 TABLE ACCESS (BY INDEX ROWID) OF 'SWD_BILLDETAIL' (Cost=39 Card=54863946 Bytes=603503406) 5 4 INDEX (RANGE SCAN) OF 'IDX_DETAIL_CN' (NON-UNIQUE) (Cost=3 Card=54863946) Statistics ---------------------------------------------------------- 0 recursive calls 4 db block gets 1196954 consistent gets 1165726 physical reads 0 redo size 316 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed 將語句中加入hints,讓oracle的優化器使用嵌套循環,并且大表作為驅動表,生成新的執行計劃: select /*+ ORDERED USE_NL(A) */ count(a。

    CHANNEL||B。user_class) from swd_billdetail B, SUPER_USER A where A。

    cn = B。cn; EXEC_ORDER PLANLINE ---------- ----------------------------------------------------------------------------------------------------- 6 SELECT STATEMENT OPT_MODE:CHOOSE (COST=109893304,CARD=1,BYTES=21) 5 SORT (AGGREGATE) (COST=,CARD=1,BYTES=21) 4 NESTED LOOPS (COST=109893304,CARD=1213745,BYTES=25488645) 1 TABLE ACCESS (FULL) OF 'SWORD。

    SWD_BILLDETAIL' (COST=165412,CARD=54863946,BYTES=603503406) 3 TABLE ACCESS (BY INDEX ROWID) OF 'SWORD。SUPER_USER。

    SQL中SELECT語句的執行順序是什么

    標準的 SQL 的解析順序為: (1)。

    FROM 子句, 組裝來自不同數據源的數據 (2)。WHERE 子句, 基于指定的條件對記錄進行篩選 (3)。

    GROUP BY 子句, 將數據劃分為多個分組 (4)。使用聚合函數進行計算 (5)。

    使用 HAVING 子句篩選分組 (6)。計算所有的表達式 (7)。

    使用 ORDER BY 對結果集進行排序 舉例說明: 在學生成績表中 (暫記為 tb_Grade), 把 "考生姓名"內容不為空的記錄按照 "考生姓名" 分組, 并且篩選分組結果, 選出 "總成績" 大于 600 分的。 標準順序的 SQL 語句為: select 考生姓名, max(總成績) as max總成績 from tb_Grade where 考生姓名 is not null group by 考生姓名 having max(總成績) > 600 order by max總成績 在上面的示例中 SQL 語句的執行順序如下: (1)。

    首先執行 FROM 子句, 從 tb_Grade 表組裝數據源的數據 (2)。 執行 WHERE 子句, 篩選 tb_Grade 表中所有數據不為 NULL 的數據 (3)。

    執行 GROUP BY 子句, 把 tb_Grade 表按 "學生姓名" 列進行分組 (4)。 計算 max() 聚集函數, 按 "總成績" 求出總成績中最大的一些數值 (5)。

    執行 HAVING 子句, 篩選課程的總成績大于 600 分的。 (7)。

    執行 ORDER BY 子句, 把最后的結果按 "Max 成績" 進行排序。

    SQL 語句的執行順序 問題

    SELECT

    從數據庫中檢索行,并允許從一個或多個表中選擇一個或多個行或列。雖然 SELECT 語句的完整語法較復雜,但是其主要的子句可歸納如下:

    SELECT select_list

    [ INTO new_table ]

    FROM table_source

    [ WHERE search_condition ]

    [ GROUP BY group_by_expression ]

    [ HAVING search_condition ]

    [ ORDER BY order_expression [ ASC | DESC ] ]

    可以在查詢之間使用 UNION 運算符,以將查詢的結果組合成單個結果集。

    語法

    SELECT statement ::=

    < query_expression >

    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }

    [ ,。n ] ]

    [ COMPUTE

    { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,。n ]

    [ BY expression [ ,。n ] ]

    ]

    [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }

    [ , XMLDATA ]

    [ , ELEMENTS ]

    [ , BINARY base64 ]

    }

    ]

    [ OPTION ( < query_hint > [ ,。n ]) ]

    < query expression > ::=

    { < query specification > | ( < query expression > ) }

    [ UNION [ ALL ] < query specification | ( < query expression > ) [。n ] ]

    < query specification > ::=

    SELECT [ ALL | DISTINCT ]

    [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ]

    < select_list >

    [ INTO new_table ]

    [ FROM { < table_source > } [ ,。n ] ]

    [ WHERE < search_condition > ]

    [ GROUP BY [ ALL ] group_by_expression [ ,。n ]

    [ WITH { CUBE | ROLLUP } ]

    ]

    [HAVING <search_condition>]

    詳細的請看一下sql的幫助文件。

    SQL語句是按什么順序執行的

    分析器會先看語句的第一個詞,當它發現第一個詞是SELECT關鍵字的時候,它會跳到FROM關鍵字,然后通過FROM關鍵字找到表名并把表裝入內存。

    接著是找WHERE關鍵字,如果找不到則返回到SELECT找字段解析,如果找到WHERE,則分析其中的條件,完成后再回到SELECT分析字段。 最后形成一張我們要的虛表。

    其它的先不說了,只說WHERE。 WHERE關鍵字后面的是條件表達式。

    如果學過C語言等編程語言就會知道,條件表達式計算完成后,會有一個返回值,即非0或0,非0即為真(true),0即為假(false)。同理WHERE后面的條件也有一個返回值,真或假,來確定接下來執不執行SELECT。

    例: SELECT * FROM STUDENT WHERE SNO = '1'; 分析器先找到關鍵字SELECT,然后跳到FROM關鍵字將STUDENT表導入內存,并通過指針p1找到第一條記錄,接著找到WHERE關鍵字計算它的條件表達式,如果為真那么把這條記錄裝到一個虛表當中,p1再指向下一條記錄。 如果為假那么p1直接指向下一條記錄,而不進行其它操作。

    一直檢索完整個表,關把虛表返回給用戶。 再說EXISTS謂詞,EXISTS謂詞也是條件表達式的一部分。

    當然它也有一個返回值(true或false)。 例: SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE SC。

    Sno = Student。Sno AND SC。

    Cno = '1'); 這是一個SQL語句的嵌套使用,但和上面說的SQL語句的執行過程也是相同的。嵌套的意思也就是說當分析主SQL語句(外面的那個SELECT,我們權且先這么叫它)到WHERE關鍵字的時候,又進入了另一個SQL語句中。

    那么也就是說,分析器先找到表Student并裝入內存,一個指針(例如p1)指向Student表中的第一條記錄。然后進入WHERE里分析里面的SQL語句,再把SC表裝入內存,另一個指針(例如p2)指向SC表中的第一條記錄,分析WHERE后面的條件表達式,依次進行分析,最后分析出一個虛表2,也就變成 SELECT Sname FROM Student WHERE EXISTS 虛表2 如果虛表為空表,EXISTS 虛表2 也就為false,不返回到SELECT,而p1指向下一條記錄。

    如果虛表2不為空也就是有記錄,那么EXISTS 虛表2 為true同,返回到SELECT并把p1指向的記錄添加到主SQL語句的虛表1當中。

    SQl中觸發器怎樣執行的

    創建觸發器 是特殊的存儲過程,自動執行,一般不要有返回值。

    1、后觸發器 (AFTER,FOR)先執行對應語句,后執行觸發器中的語句。

    2、前觸發器 并沒有真正的執行觸發語句(insert,update,delete),而是執行觸發后的語句。

    3、行級觸發器 (FOR EACH ROW) 在SQL server 中不存在。

    擴展資料:

    創建觸發的語法

    CREATE TRIGGER trigger_name --觸發器名稱

    ON table_name --觸發的表

    [WITH ENCRYPTION]

    FOR [DELETE, INSERT, UPDATE] --選擇觸發器類型

    AS --觸發后要做的語句

    T-SQL語句

    GO --結束標記

    如何直接執行SQL語句

    using (SqlConnection con = new SqlConnection(*tionStrings["default"].ConnectionString))

    { SqlCommand cmd = new SqlCommand();

    *tion = con;

    sqlStr = @"";

    *dText = sqlStr ;

    *dType = *;

    gs = *eNonQuery(); }

    這個就是直接執行sql語句的代碼!

    如何計算SQL語句執行時間

    一、按照*及CSDN等搜索結果 在SQL語句前面加上了這一句: 經查詢,SET STATISTICS TIME ON命令報告下面的查詢的實際占用時間和CPU使用情況。

    使用后覺得給出的時間很細致,跟執行過程結合的很緊密,但是比較多,似乎不夠精確。 二、CNBLOGS網友的文章里 Code use northwind declare @date1 datetime declare @date2 datetime select @date1=getdate() --測試語句 select * from employees select @date2=getdate()。

    轉載請注明出處華閱文章網 » 數據庫語句執行

    短句

    調用sql語句

    閱讀(248)

    數據調用的sql語句 1、調用含有圖片的日志 1. SELECT * FROM `uchome_blog` WHERE `picflag` =1; 復制代碼 2、調用最近更新的10條日志 1. SELECT * FROM uchome_blog FOR

    短句

    英語句子的賓語

    閱讀(270)

    英語中句子的賓語是什么 英語語句基本結構分析: >>主謂賓結構: 主語:可以作主語的成分有名詞(如boy),主格代詞(如you),動詞不定式,動名詞等。主語一般在句首。注意名詞單數形式常和

    短句

    按鍵精靈if循環語句

    閱讀(243)

    按鍵精靈if循環語句 doifcolor cx,cy,col,0 //如果找到色,cx,cy就是此色的坐標(兩者都會大于0),沒找到,就是-1,-1end ifdelay 200 //大至每0.2秒判斷一次,以減小資源占用。loop

    短句

    聯合查詢sql語句

    閱讀(262)

    SQL聯合查詢語句 A表字段stuid,stunameB表字段bid,stuid,score,coursename,statusCREATE TABLE A#( stuid INT, stuname VARCHAR(10));CREATE TABLE B#

    短句

    sql語句賦值給變量賦值

    閱讀(541)

    如何把sql語句查詢到的值賦值給變量樓上的例子復雜了,不需要那樣去實現,可以簡化如下:string dbStr = "data source=127.0.0.1;uid=sa;pwd=fhploverrz;database=BLOG"; int result

    短句

    英語句子講解

    閱讀(239)

    英語句子結構講解 含例子 組成句子的各個部分叫句子成分。英語句子成分有主語,謂語,表語,賓語,賓語補足語,定語,狀語等。 順序一般是主語,謂語,賓語,賓語補足語,而表語,定語,狀語的位置要根據情況而定。 1、主語 主語表示句子主要說明的人或事物,

    短句

    茶茶葉語句

    閱讀(203)

    【贊美茶的詩句、語言都行!最好是名人名句、或者話語組成里面就有一、齊己的贊美茶詩 百草讓為靈,功先百草成.甘傳天下口,貴占火前名.出處春無雁,收時谷有鶯.封題從澤國,貢獻入秦京.嗅覺精新極,嘗知骨自輕.研通天柱響,摘繞蜀山明.賦客秋吟起,禪

    短句

    夸別人的語句

    閱讀(201)

    夸人的語句 越夸張越好 1:擴大夸張: 例:你端坐在那里,不怒而威,明德惟馨,乃世人典范。 2:縮小夸張: 例:你端坐在那里,我自慚形穢,如俗世塵埃不值一提。 3:超前夸張: 例:你端坐在那里,我堅信世界將臣服在你的腳下。 4:幻想夸張: 例:你端坐在那里,

    短句

    青春勵志語句

    閱讀(230)

    青春勵志的優美句子青春勵志的句子,青春唯美勵志語錄 1、青春在我的心中是苦澀的又是甘甜的,是精致的又是粗糙的,是清晰的又是朦朧的,是一杯苦茶,最后卻品出清雅之香。 2、生命之舟面對險灘,面對激流,弱者會選擇逃避和放棄,而強者則會選擇面對

    短句

    accesssql執行sql語句

    閱讀(260)

    ACCESS執行SQL語句,ACCESS怎么寫SQL語句 Access SQL查詢語句是兼容的,有兩種方式可以使用SQL語句:方式一:在“查詢”的試圖里,可以使用Access的向導模式,也可以直接使用SQL語言

    短句

    存儲過程if語句oracle

    閱讀(252)

    oracle 存儲過程中 如果用if語句判斷一條查詢語句的結果集是否為空 已經經過測試,可以。create table test1023(id int); --創建測試表 test1023declare cnt int;beginselec

    短句

    中switch語句

    閱讀(221)

    java中switch語句的用法 switch 語句的格式:switch ( 整型或字符型變量 ) { case 變量可能值1 : 分支一; break; case 變量可能值2 : 分支二; break; case 變量可能值3

    短句

    調用sql語句

    閱讀(248)

    數據調用的sql語句 1、調用含有圖片的日志 1. SELECT * FROM `uchome_blog` WHERE `picflag` =1; 復制代碼 2、調用最近更新的10條日志 1. SELECT * FROM uchome_blog FOR

    短句

    英語句子的賓語

    閱讀(270)

    英語中句子的賓語是什么 英語語句基本結構分析: >>主謂賓結構: 主語:可以作主語的成分有名詞(如boy),主格代詞(如you),動詞不定式,動名詞等。主語一般在句首。注意名詞單數形式常和

    短句

    按鍵精靈if循環語句

    閱讀(243)

    按鍵精靈if循環語句 doifcolor cx,cy,col,0 //如果找到色,cx,cy就是此色的坐標(兩者都會大于0),沒找到,就是-1,-1end ifdelay 200 //大至每0.2秒判斷一次,以減小資源占用。loop

    短句

    sql語句賦值給變量賦值

    閱讀(541)

    如何把sql語句查詢到的值賦值給變量樓上的例子復雜了,不需要那樣去實現,可以簡化如下:string dbStr = "data source=127.0.0.1;uid=sa;pwd=fhploverrz;database=BLOG"; int result

    短句

    聯合查詢sql語句

    閱讀(262)

    SQL聯合查詢語句 A表字段stuid,stunameB表字段bid,stuid,score,coursename,statusCREATE TABLE A#( stuid INT, stuname VARCHAR(10));CREATE TABLE B#

    短句

    英語句子講解

    閱讀(239)

    英語句子結構講解 含例子 組成句子的各個部分叫句子成分。英語句子成分有主語,謂語,表語,賓語,賓語補足語,定語,狀語等。 順序一般是主語,謂語,賓語,賓語補足語,而表語,定語,狀語的位置要根據情況而定。 1、主語 主語表示句子主要說明的人或事物,

    短句

    javaif語句elseif

    閱讀(254)

    java中的if與else語句 if (條件一){} = 如果括號中條件一的正確,則執行大括號中的語句if (條件一){語句一} else{語句二} 如果條件一正確,執行語句一,否則執行語句二if (條件一){

    久久热在线视频