优化哪些方面
1.表设计上
范式,存储引擎,字段类型
2.功能上
索引,缓存,分区
3.sql语句上
合理sql,经验
4.架构上
主从复制,负载均衡,读写分离
存储引擎
存储引擎是真正存储数据的地方
Mysql 5.5
1 不支持事务
2 表级锁
3 数据和索引是分开存储
4 insert ,select 适合高速插入和检索。(bbs,博客)
5 可压缩
6 全文索引(全文搜索)full index
快 糙 猛 php mysql
压缩
INnodb
*************************** 8. row ***************************
Engine: InnoDB
- 事务处理
- 行级锁 并发性
- 按照主键排序
- 外键,维护数据完整性 (逐渐淡化)
- 考虑CPU效率和处理大数据的最佳性能
- 数据和索引一块存储
- 5.6.4开始支持全文索引
Innodb表的文件
ibdata1 这是所有的innodb表的表空间文件
开启这个选项(mysql 5.6自动开启)
mysql> show variables like 'innodb_file_per_table%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
锁的概念
出现争夺资源。
读锁. 共享锁. 一个进程在读取某表的时候,另一个进程也可以读取.但是当前进程仅仅能读取这个表,而不能操作其他表.
写锁. 独占锁. 一个进程在写表时,是不允许另一个进程写,当前进程仅仅能操作这一个表.
锁的范围,精细程度上。
Myisam表是表级锁。 Innodb是行级锁。
表级锁: 开销小,加锁时间短。
行级锁:相反。
Myisam和innodb的比较
Innodb:数据完整性,并发性好。事务,且是默认表引擎
适合银行转账,等数据安全要求高的应用
- Myisam:压缩存储,适合 insert和select多的应用,博客,BBS等
- 高速并发插入,
- 压缩:
- 压缩后的数据
- 压缩后,不能再对表进行写操作
- 解压缩
除非考虑到innodb不支持的特性,否则就优先选择innodb存储引擎。
其他的存储引擎
- Archive
- 归档型。 Insert select 日志
- Memory
- 内存