『壹』 oracle查詢同一條語句,第一次查詢很快,第二次查詢就幾乎卡死
這個時間條件的修改不會改變結果集,雖然不會改變結果集,但會改變緩存里的數據。
第二次查詢在PLsql裡面或者在程序裡面查詢都會卡住,而且這種情況還是偶發的,有時候不修改任何條件連續查詢就一直很快。看看是不是有並發什麼的。這種情況確實比較難判斷。
『貳』 同一個SQL,在8個小時內為什麼會有不同的執行計劃有的快,有的慢
一般不是執行計劃不同,除非你有比如建立索引的等操作。
這個慢和快在這里,不是執行計劃決定,而是你的伺服器的情況不同,可能執行時cpu同時處理的所以慢內容很多,所以慢,也可能是內存導致的,也可能是io導致的,也就是說可能性很多,如果要分析那真的要一定時間。
當然,執行計劃也不一定完全一致,比如你會發現第二次查詢一般比第一次快,這是因為上次查詢的內容保存在內存中,只要還沒有被替換掉,那麼下次查詢就會快。這種在執行計劃上是看不出來的,但是確實也存在不同。
『叄』 一條復雜的SQL語句,為什麼第一次查詢很慢,而第二次查詢卻明顯快了
sql語句如果聯合了多張表或頻繁使用多個函數進行查詢,確實會影響效率。需要優化的話,建議給查詢條件設置索引,索引能提高查詢速度;但是如果你的sql語句需要復合查詢而且有很多運算的話,建議還是把一條sql語句拆開成三四條來寫,雖然拆分來寫有點麻煩但是查詢響應速度明顯快好幾倍,不信你試試!
『肆』 存儲過程第一次執行耗時30分鍾,第二次開始每次耗時不到3分鍾,這是什麼原因
sql是高級語言,資料庫系統執行sql之前要將sql語句進行解析(相當於編譯),這個過程叫硬解析;資料庫系統每次執行sql之前都會檢查共享池中是不是存在已經解析過的語句,如果有就拿來直接用,這叫軟結息。軟解析比硬解析效率高,這是影響因素之一;
二、第一次執行可能沒有走索引,第二次執行使用第一次執行的執行計劃
三、看你的存儲過程做了些什麼,有可能第一次把活幹完了,導致第二次執行沒什麼活干
以上回答基於oracle體系結構
『伍』 有個SQL,在pl/sql上執行第一次要40來秒,後面執行就只要1秒不到,怎麼樣才能讓第一次執行就很快呢
先告訴下你oracle中sql處理機制吧
像你說的這個情況,就是oracle中的預編譯sql過程,它會將你運行過的sql當做一個模板存在內存里,當你下次運行結構與這個sql一樣的語句時,然後就直接使用之前的那個sql的緩存,然後換一下where條件的參數值,跳過了後面的很多處理過程,所以你會發現後面再運行類似的sql,處理效率會高很多。
根據我上面的推斷,想讓sql第一次執行快,只能是讓查出來的結果集盡可能的少,但又不能改變它的sql結構,否則就錯了。。
『陸』 應用第一次調用sql server 資料庫後,再次調用時明顯速度快了是什麼原因
sql server會把查詢過得放到類似緩存的東西中,下次查詢不需要在進行編譯等操作,所以速度會明顯快了。
就如存儲過程,第一次執行很慢,第二次就很快了。
『柒』 同樣一個存儲過程,為什麼第一次快,第二次就很慢
sql是高級語言,資料庫系統執行sql之前要將sql語句進行解析(相當於編譯),這個過程叫硬解析;資料庫系統每次執行sql之前都會檢查共享池中是不是存在已經解析過的語句,如果有就拿來直接用,這叫軟結息。軟解析比硬解析效率高,這是影響因素之一;
二、第一次執行可能沒有走索引,第二次執行使用第一次執行的執行計劃
三、看你的存儲過程做了些什麼,有可能第一次把活幹完了,導致第二次執行沒什麼活干
以上回答基於oracle體系結構
『捌』 一個SQL有時執行速度很快有時很慢,請問處理思路
原因有很多的。
主鍵約束。
當數據量達到百萬以上的時候,你用主鍵去搜索某一條數據時速度是極快的。但當你不用主鍵去搜索的時候速度就降了幾十倍甚至上百倍,這個是主鍵的好處。
索引。
當你的表欄位設置有索引的時候,搜索速度比不創建索引要快幾倍至幾十倍。
sql語句不夠優化。
在查詢某數據的時候,能不用*就盡量不用,想要哪個欄位就查哪個,多餘的不要,這樣就能達到數據傳輸精簡化,讓查詢速度也能快上許多。
多表聯合查詢。
在大數據量的時候這個多表查詢盡量不用,畢竟是很耗內存的,寧願用其他語言循環執行簡單的 select 欄位 from 表名 where 條件 這樣的簡單sql語句,這樣也能加快速度。
其他方面還有很多的,比如伺服器的原因呀,資料庫表結構類型呀。。。我就不多說了。
『玖』 SQL緩存問題,第一次查慢,第二次查快
查詢時,資料庫引擎會判斷,如果數據在內存中,則會從內存讀取數據,如果數據不在內存在,則先從硬碟讀到內存,然後再供查詢。
所以第一次查的時候,根據你的語句,資料庫引擎會把一些數據從硬碟讀到內存,第二次再查的時候,就從內存讀數據,就快了很多了。
oracle有一個功能是讓表常駐內存。
『拾』 oracle 查詢語句 第一次執行很快,第二次執行就很慢 。是什麼原因
oracle sql 第一次查詢快, 以後查詢慢
大多數情況下,用oracle, 第一次查詢慢, 第二次查詢肯定比第二次查詢快對吧,
但對於這種情況,第一次查詢快, 以後查詢慢。
Cardinality Feedback基數反饋, 是版本11.2中引入的關於SQL 性能優化的新特性,該特性主要針對 統計信息陳舊、無直方圖或雖然有直方圖但仍基數計算不準確的情況, Cardinality基數的計算直接影響到後續的JOIN COST等重要的成本計算評估,造成CBO選擇不當的執行計劃。以上是Cardinality Feedback特性引入的初衷。
基數反饋多少也造成了一些麻煩,典型的情況是測試語句性能時,第一次的性能最好,之後再運行其性能變差。
如何禁用Cardinality Feedback基數反饋
對於這些」惹火」特性,為了stable,往往考慮關閉該特性。
可以通過多種方法禁用該特性
1. 使用 _optimizer_use_feedback 隱藏參數
session 級別
SQL> alter session set 「_optimizer_use_feedback」=false;
會話已更改。
system級別
SQL> alter system set 「_optimizer_use_feedback」=false;
系統已更改。
————————————————
原文鏈接:https://blog.csdn.net/demonson/article/details/80522150