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缓存

相关文章
相关标签/搜索