1.在 innodb 事務中,行鎖是在需要的時候才加上的,但並不是不需要了就立刻釋放,而是要等到事務結束時才釋放。所以把
最可能造成鎖衝突、最可能影響併發度的鎖盡量往後放
2.設定innodb_deadlock_detect=on來開啟死鎖自動檢測,如果在熱點更新的情況下,建議引入中介軟體來削峰。
3.一般情況下,盡量選用普通索引,唯一索引引入更多的開銷。
4.給字串欄位加索引,可以定義一部分作為字首索引,比如:alter table suser add index index2(email(6)); 減少索引的長度,可以節省空間,但是有可能會增加掃瞄次數。一般可以使用如下的語句來區分字首索引適合的長度:
select
count(distinct left(email,4))as l4,
count(distinct left(email,5))as l5,
count(distinct left(email,6))as l6,
count(distinct left(email,7))as l7,
from suser;
同時,字首索引會使覆蓋索引失效,即使字首是完整的長度。
5.如果索引字段字元太長,還可以使用hash欄位來減少長度。比如使用crc32()來計算出乙個新的字段,但是hash可能會碰撞,所以查詢時還得帶上原來的值來進一步判斷。
6.設定 innodb_file_per_table=on,使每個innodb表資料儲存在乙個.ibd為字尾的檔案中。使用delete命令,只是吧不需要資料標記成可復用,但是磁碟檔案大小不會改變。不止刪除,插入也會造成這種空洞現象。解決方法是重建表: alter table a engine=innodb。
7.統計總數,建議用count(*),innodb對這條語句做了相應的優化。
Mysql學習筆記(三)
所謂的子查詢,就是在 乙個查詢中巢狀了其他的若干查詢 即在乙個select查詢語句中的where和from子句中包含另乙個select查詢語句。在查詢語句中,外層的select查詢語句稱為 主查詢 where子句中的select查詢語句被稱為 子查詢 也稱巢狀查詢。列子查詢是指查詢結果返回的結果集是...
MySQL學習筆記(三)
一 修改提示操作符的命令 prompt 用法 prompt 後面接入 u 使用者名稱 h 伺服器的名字 d 當前開啟的資料庫 問題 但是這個命令有個問題是,當你在設定了你的 提示符的格式後,你退出了資料庫,等你下次再進來資料庫的時候提示符又變為了系統預設的,如何才能夠一次設定好,就不會變了呢?解決 ...
mysql學習筆記(三)
19使用者管理 許可權表儲存賬戶許可權資訊表主要有 user db host tables priv columns priv procs priv 20賬戶管理 建立新使用者 create user user name create user建立的使用者沒有任何許可權 建立使用者名稱jeffery...