青铜到王者,快速提升你 MySQL 数据库的段位!(4)
3. 创建索引的过程中,学会查看执行计划。内功心法:先看 type 值,再看 key,再看 rows,最后看 extra; mysql> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> explain select * from sbtest; +----+-------------+--------+------+---------------+------+---------+------+-------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+------+---------------+------+---------+------+-------+-------+ | 1 | SIMPLE | sbtest | ALL | NULL | NULL | NULL | NULL | 98712 | NULL | +----+-------------+--------+------+---------------+------+---------+------+-------+----- 4. 了解创建索引的好处 a. 提高数据检索效率 b. 提高聚合函数效率 c. 提高排序效率 d. 个别时候可以避免回表 e. 减少多表关联时扫描行数 f. 主键、唯一索引可以作为约束 ——对事务的学习 先要知道事务的四大特性(ACID): a. 原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的 b. 一致性(Consistency) 一致性是指数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束. c. 隔离性(Isolation) 隔离性是数据库允许多个并发事务同时对数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致. d. 持久性(Durability) 事务处理结束后,对数据的修改就是永久的 熟悉 mysql 数据库四种事务隔离级别: 1. read uncommitted(RU)读未提交: 一个事务中,可以读取到其他事务未提交的变更 2. read committed(RC)读已提交: 一个事务中,可以读取到其他事务已经提交的变更 3. repetable read,(RR)可重复读: 一个事务中,直到事务结束前,都可以反复读取到事务刚开始看到的数据,不会发生变化 4. serializable(串行读): 即便每次读都需要获得表级共享锁,每次写都加表级排它锁,两个会话间读写会相互阻塞。 个人建议:对于交易类系统的网站,大家尽量使用事务级别比较高的RR;对于一些门户类网站大家使用RC就可以了。 Innodb 的锁,默认三种锁算法: record; Gap lock; next-key lock 默认锁算法是 next-key lock 间隙锁保证不会出现幻读现象。 数据库字符集 先学会查看数据库的字符集: [root@node3 ~]# mysql -uroot -proot123 mysql> show variables like '%char%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec) 如果想保证不会出现中文乱码的情况发生,必须满足以下三点: 连接终端必须UTF8 操作系统必须UTF8 数据库必须UTF8 三者统一就不会出现中文乱码的问题 ——数据库权限问题的管理 1. 权限申请流程要设置规范,合理. 2. 测试和正式环境都要严格控制数据库的写权限,禁止分配 create,alter 这样的权限给开发人员。并且读权限和外业务服务分离. 3. 领导需要权限时,问清目的,发邮件说明。尽量都由DBA全权管理 4. 特权账号 all privileges 必须由DBA人员控制 5. 单库单用户,禁止给我一个用户账号管理多个库。 6. 只读账号 select,可以后期配合主从架构中read_only 一起使用 7. 禁止 root 用户作为远程连接用户使用 第四部分:尊贵铂金篇 (编辑:ASP站长网) |