Sql優化 3 兩個簡單實用的優化方法

2021-08-21 04:31:16 字數 1942 閱讀 8984

定期分析表和檢查表

分析表的語法如下:

analyze [local | no_write_to_binlog] table tbl_name [, tbl_name] ...
本語句用於分析和儲存表的關鍵字分布,分析的結果將可以使得系統得到準確的統計資訊,使得 sql 能夠生成正確的執行計畫。如果使用者感覺實際執行計畫並不是預期的執行計畫,執行一次分析表可能會解決問題。在分析期間,使用乙個讀取鎖定對錶進行鎖定。這對於 myisam, bdb 和 innodb 表有作用。對於 myisam 表,本語句與使用 myisamchk -a 相當,下例中對錶 user 做了表分析:

上面結果顯示了4列資訊,詳細介紹如下: 

table:表示表的名稱;

op:表示執行的操作。analyze表示進行分析操作。check表示進行檢查查詢。optimize表示進行優化操作; 

msg_type:表示資訊型別,其顯示的值通常是狀態、警告、錯誤和資訊這四者之一;

msg_text:顯示資訊。

對錶的定期分析可以改善效能,且應該成為常規維護工作的一部分。因為通過更新表的索引資訊對錶進行分析,可改善資料庫效能。

檢查表的語法如下 :

check table tbl_name [, tbl_name] ... [option] ... option =
檢查表的作用是檢查乙個或多個表是否有錯誤。check table 對 myisam 和 innodb 表有作用。

對於 myisam 表,關鍵字統計資料被更新,例如:

check table 也可以檢查檢視是否有錯誤,比如在檢視定義中被引用的表已不存在,舉例如下。

1)首先我們建立乙個檢視。

create view person_view as select * from person;
2)然後 check 一下該檢視,發現沒有問題。 

3)現在刪除掉檢視依賴的表。

drop table person;
4)再來 check 一下剛才的檢視,發現報錯了。

定期優化表

主要作用是消除刪除或者更新造成的空間浪費。

優化表的語法如下:

optimize [local | no_write_to_binlog] table tbl_name [, tbl_name] ...
如果已經刪除了表的一大部分,或者如果已經對含有可變長度行的表(含有 varchar、blob 或 text 列的表)進行了很多更改,則應使用 optimize table 命令來進行表優化。這個命令可以將表中的空間碎片進行合併,並且可以消除由於刪除或者更新造成的空間浪費,但optimize table 命令只對 myisam、bdb 和 innodb 表起作用

以下例子顯示了優化表 user的過程:

注意:analyze、check、optimize 執行期間將對錶進行鎖定,因此一定注意要在資料庫不

繁忙的時候執行相關的操作。

本文內容主要摘自於linux公社 -深入淺出mysql全文.pdf。

主要為了加強記憶,結合了自己的測試與理解。

virtual function的兩個優化

這倆真是歡啊。humus這篇說d3d的api都是virtual function call,這效能損失很心疼。所以就弄個callback函式,然後到d3ddevice的virtual table把api的函式位址找出來,然後指過去,於是api呼叫就不用經過virtual table的查詢了。dela...

virtual function的兩個優化

這倆真是歡啊。humus這篇說d3d的api都是virtual function call,這效能損失很心疼。所以就弄個callback函式,然後到d3ddevice的virtual table把api的函式位址找出來,然後指過去,於是api呼叫就不用經過virtual table的查詢了。dela...

簡單的sql查詢優化

1 sql中禁止用select from 的寫法 缺點 將會增加服務區io的輸出負擔 2 如果乙個sql比較複雜 則寫完的sql 可以用 在plsql 中用f5 來看起執行計畫,例如sql select from exp booking where booking id like 123123123...