㈠ 如何查找Mysql中查詢慢的SQL語句
問題
我們有一個 SQL,用於找到沒有主鍵 / 唯一鍵的表,但是在 MySQL 5.7 上運行特別慢,怎麼辦?
實驗
我們搭建一個 MySQL 5.7 的環境,此處省略搭建步驟。
寫個簡單的腳本,製造一批帶主鍵和不帶主鍵的表:
可以看到執行時間變成了 0.67s。
整理
我們診斷的關鍵點如下:
1. 對於 information_schema 中的元數據表,執行計劃不能提供有效信息。
2. 通過查看 MySQL 改寫後的 SQL,我們猜測了優化器發生了誤判。
3. 我們增加了 hint,指導 MySQL 正確進行優化判斷。
但目前我們的實驗僅限於猜測,猜中了萬事大吉,猜不中就無法做出好的診斷。
㈡ MYSQL會把查詢的結果緩存多久
設置好查詢緩存的大小就行了。比如設置個20MB. SET GLOBAL QUERY_CACHE_SIZE=20000000; mysql會將查詢SQL和結果集存到緩存中,等下次遇到相同的SQL語句時,結果集從緩存中讀齲 不設置就不用緩存了
㈢ 如何在sqlplus中查看,修改,執行緩存的SQL語句
oracle 10g的DBMS_XPLAN包中display_cursor函數不同於display函數,display_cursor用於顯示SQL語句的真實的執行計劃,在大多數情況下,
顯示真實的執行計劃有助於更好的分析SQL語句的全過程,尤其是運行此SQL語句實時的I/O開銷。通過對比預估的I/O與真實的I/O開銷來判斷
SQL語句所存在問題,如缺少統計信息,SQL語句執行的次數,根據實際中間結果集的大小來選擇合適的連接方式等。本文僅僅講述
display_cursor函數的使用。
一、display_cursor函數用法
1、display_cursor函數語法
DBMS_XPLAN.DISPLAY_CURSOR(
sql_id IN VARCHAR2 DEFAULT NULL,
cursor_child_no IN NUMBER DEFAULT NULL,
format IN VARCHAR2 DEFAULT 'TYPICAL');
2、display_cursor函數參數描述
sql_id
指定位於庫緩存執行計劃中SQL語句的父游標。默認值為null。當使用默認值時當前會話的最後一條SQL語句的執行計劃將被返回
可以通過查詢V$SQL 或V$SQLAREA的SQL_ID列來獲得SQL語句的SQL_ID。
cursor_child_no
指定父游標下子游標的序號。即指定被返回執行計劃的SQL語句的子游標。默認值為0。如果為null,則sql_id所指父游標下所有子游標
的執行計劃都將被返回。
format
控制SQL語句執行計劃的輸出部分,即哪些可以顯示哪些不顯示。使用與display函數的format參數與修飾符在這里同樣適用。
除此之外當在開啟statistics_level=all時或使用gather_plan_statistics提示可以獲得執行計劃中實時的統計信息
有關詳細的format格式描述請參考:dbms_xplan之display函數的使用 中format參數的描述
下面給出啟用統計信息時format新增的修飾符
iostats 控制I/O統計的顯示
last 默認,顯示所有執行計算過的統計。如果指定該值,則只顯示最後一次執行的統計信息
memstats 控制pga相關統計的顯示
allstats 此為iostats memstats的快捷方式,即allstats包含了iostats和memstats
run_stats_last 等同於iostats last。只能用於oracle 10g R1
run_stats_tot 等同於iostats。只能用於oracle 10g R1
㈣ sql自動釋放內存解決方案
這種做法是不可取的,很少有人把查詢結果緩存在內存中的。看似下次查詢同樣的記錄時會很快得到結果,但實際上跟你想像的速度慢多了。提高查詢速度的途徑應該放在如何優化sql語句上。
㈤ sql配置緩存大小原因
數據緩存和執行緩存的控制。
SQLServer佔用的內存主要由三部分組成:數據緩存(DataBuffer)、執行緩存(ProcereCache)、以及SQLServer引擎程序。SQLServer引擎程序所佔用緩存一般相對變化不大,則我們進行內存調優的主要著眼點在數據緩存和執行緩存的控制上。
SQL語句在執行前首先將被編譯並通過查詢優化引擎進行優化,從而得到優化後的執行計劃,然後按照執行計劃被執行。對於整體相似、僅僅是參數不同的SQL語句,SQLServer可以重用執行計劃。但對於不同的SQL語句,SQLServer並不能重復使用以前的執行計劃,而是需要重新編譯出一個新的執行計劃。同時,SQLServer在內存足夠使用的情況下,此時並不主動清除以前保存的查詢計劃。這樣,不同的SQL語句執行方式,就將會大大影響SQLServer中存儲的查詢計劃數目。如果限定了SQLServer最大可用內存,則過多無用的執行計劃佔用,將導致SQLServer可用內存減少,從而在執行查詢時尤其是大的查詢時與磁碟發生更多的內存頁交換。如果沒有限定最大可用內存,則SQLServer由於可用內存減少,從而會佔用更多內存。
㈥ 在navicat的「」查詢「功能中運行sql語句是不是有緩存
你好,你應該已經建表了吧? 兩種方法 打開一個表,然後點 文件->查詢表(快捷鍵Ctrl+q) 寫好後點運行即可(快捷鍵Ctrl+r) 或者在任意窗口下點 工具->Console(快捷鍵F6) 這種如同MYSQL自帶的命令行模式 祝你好運