mysql筆記與優化(持續更新中....)

mysql
查看鏈接狀態: show processlist;
從新初始化鏈接資源: mysql_reset_connection() 影響:變量的丟失與清除 鎖 事務回滾 TEMPORARY表會清除等
查詢緩存(mysql8.0後去除查詢緩存): my.cnf中query_cache_type=1開啓, 或者顯示指定 select SQL_CACHE * from t;
事務 (建議: set autocommit=1):
    讀未提交 reand uncommitted- 一個事務還沒提交時 作的變動就能被別的事務看到。 髒讀 不可重複讀
    讀提交 read committed- 一個事務提交後 作的變動才能被別的事務看到。幻讀 不可重複讀
    可重複讀 repeatable read- 一個事務執行過程當中看到的數據,老是跟這個事務在啓動時看到的數據是一致的固然在可重複讀隔離級別下,
                            未提交變動對其餘事務也是不可見的。幻讀 
    串行化 serializable- 對於同一行記錄,「寫」會加「寫鎖」,「讀」會加「讀鎖」 
                        當出現讀寫鎖衝突的時候 後訪問的事務必須等前一個事務執行完成,才能繼續執行
    查看隔離級別: show variables like 'transaction_isolation'(mysql5.7) 老版本: show variables like 'tx_isolation';;
    查詢長事務(查找持續時間超過60s的事務):
    select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60;
索引:
    建立索引:
        alter table table_name add INDEX index_name(字段); 普通索引
        alter table table_name add UNIQUE (字段); 惟一索引
        alter table table_name add PRIMARY KEY (字段); 主鍵索引
    刪除索引:
        drop INDEX index_name ON table_name;
        alter table table_name DROP INDEX index_name;
        alter table table_name DROP PRIMARY KEY;
    查看索引:
        show index from table_name;
        show keys from talbe_name;
    聯合索引(name age) 
    使用索引格式: where name like "王%" 
鎖:
    全局鎖:
        當須要讓整個庫處於只讀狀態 執行 : 
            1   flush tables with read lock;(FTWRL) (用這個, 緣由:global變量方式影響比較大,還有數據庫
                異常 readonly會一直保持,致使庫一直處於不可寫狀態,用ftwrl遇到異常,mysql會自動釋放鎖)
            2   set global readonly=true
    表級鎖:
        lock tables table_name read/write
        unlock tables 釋放鎖   mysql

導出數據:
    mysqldump --single-transaction(參數:導出數據會啓動一個事務 確保拿到的數據是一致的 因爲MVCC的支持 這個過程當中數據是能夠正常更新的)sql

技巧:
    數據量很大的時候,二級索引比主鍵索引更快:這種狀況只有在使用覆蓋索引時才成立,不用回表。數據庫

FAQ:
刪除主鍵索引:
    alter table T drop primary key;
    alter table T add primary key(id);
    答案: 上面重建主鍵的過程不合理。不管是刪除主鍵仍是建立主鍵,都會將整個表重建,因此連着執行這兩個語句的話,第一個語句就白作了,
         你能夠用這個語句代替: alter table T engine=InnoDB緩存

相關文章
相關標籤/搜索