Mysql使用最佳化之處

來源:互聯網
上載者:User

標籤:

1 開啟事務之前需要rollback 串連控制代碼。(清理垃圾)
2 mysql_ping 失敗,程式需要處理重連邏輯;
3 mysql_query()執行的SQL語句是一個以‘/0’結尾的字串,而mysql_real_query()執行的字串長度是參數指定的,因此,前者不能不能包含位元據(位元據中可能會包含‘/0’,導致被認為到達字串末尾)
實際使用中,推薦使用mysql_real_query
4 mysql C API   中SQL不需要 ‘;‘ 結尾;
5 mysql 轉義;(老問題了)
6 所有update 語句,建議後邊調用函數判斷受影響的行數,是否是自己預期值;
7 mysql_real_connect 需要設定連線逾時時間,特別是處理重連邏輯的時候,以免程式堵死;
8 程式rollback時候, 需要習慣性的校正應用的錯誤碼,避免錯誤碼沒有賦值,調用者以為調用成功,造成漏洞;
9 多線程環境下使用libmysqlclient_r 庫,非libmysqlclient 庫
10 mysql_real_connect/mysql_init 多線程環境下調用需要加鎖;
11 使用mysql_real_escape_string, 需要注意目標緩衝區是 2*n+1 大小;
12 mysql_store_result 這個函數是分配的記憶體的。 使用完需要釋放,避免記憶體泄露;

13 mysql的事務盡量小,使用完,立即commit或rollback.不要起一個過大的事務。
14 mysql的隔離等級注意使用 Read Commited。不然會產生鎖間隙的問題。
15 避免嘗試去鎖一個不存在的記錄,for update語句where條件請使用主鍵(鎖定一個非主鍵,會預設同時鎖定一個主鍵,這是造成很多死結的原因)。避免過多的for update。
16 select語句必須使用索引,where條件避免使用 or 或者在條件中運用運算運算式,會造成索引失效。
17 聯合索引可以替代單獨的索引。如果已有聯合索引,不需要重複建立單獨的索引。索引過多會導致插入變慢。注意是聯合索引的第一個可以省略。 避過(f1,f2),可以省略f1的單獨索引,但是不能省略f2的單獨索引。
18 where條件,結果集不要太大,如果超過30%,索引會時效,會導致mysql掃描全表。不確定時,請用explain做檢測。
19 mysql單表記錄保持在1000W以下,以獲得較好的效能。
20 mysql資料庫連結數不能過多,請保持在200以下。
21 修改mysql 鎖等待時間,預設為50s,避免for update等待時間超長,造成系統阻塞 innodb_lock_wait_timeout(修改這個屬性需要重啟資料庫)
22 如果啟用事務,可以不必顯示的設定set autocommit=0,即使當時autocommit模式為1(直接提交模式),可以通過begin/commit來隱式的調用。
   如果不使用事務,則必須顯示的調用 set autocommit=1.因為不能確定,是否某長連結中,有人設定了set autocommit=0.

Mysql使用最佳化之處(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.