MySQL优化

时间:2021-04-12 12:15:31   收藏:0   阅读:0

【建表原则】

定长与边长相分离
常用与不常用相分离
适当反范式

【列类型选择】

int > date,time > enum,char > varchar > blob,text
字符串相对于整形要考虑字符集和校对集
尽量不用NULL

【btree索引 hash索引】

有必要使用联合索引(多列索引、复合索引)(左前缀原则)要考虑列顺序
分析sql
explain 查询语句 \G;

【聚簇索引(innodb) 非聚簇索引(myisam)】

innodb 次级索引指向对主键的引用(因为主键索引下是数据)
页分裂:按主键重新排序组织数据
innodb 防止页分裂 避免主键不规则插入
索引覆盖:查询的数据不回行直接在索引树上就能找到
注意:innodb的叶子不要太过沉重,否则查询会较慢

性能跟踪工具

set profiling=1(打开)
show profiles
show profile cpu,block,io for query 查询语句的id
set profiling=0(关闭)

【理想的索引】

1、常用
2、区分度高
3、长度较小
4、尽量覆盖常用索引
较长字段建索引办法:
只取前几位(直到区分度相当较高)创建索引(create index 索引名 on 表名 列名(长度))
或者(alter table 表名 add index 索引名 on 列名(长度))
重复较多字段建索引办法:
1、倒叙 2、伪哈希算法(新增一个字段,存这个字段的hash,然后在这个字段上建立索引)
多列索引:
ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))
避免查询产生filesort
禁止重复索引 可以冗余索引
整理索引碎片(optimize table 表名)表优化

【explain】

show status like "_tables%";(查看有没有发生在磁盘上的排序)

强制使用索引:(不推荐)

最后也是最重要的一点:结合实际优化索引

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!