标签:
centos mysql 优化 第十三节课
MySQL索引
主键值不能重复,也不能是NULL
unique key + not null 业务主键用唯一索引代替
案例:某InnoDB表,没有自增列主键,使用一段时间后,产生碎片,重整表空间后,从13G变成了9G
重整表空间的3种方法
alter table xx engine=innodb;
optimize table xx;
create primary key on id 加主键聚集索引
mysql5.6之后依然无法online ddl做 加主键聚集索引
前缀索引
部分索引原因
char/varchar太长全部做索引,效率太差,存在浪费
blob/text类型不支持整列作为索引,所以使用前缀索引
统计平均值
遵循2/8原则
语法:alter table t add index k1 ( username(9) );
username字段的前9个字符
部分索引选择建议
最小:3
最大:15
平均:8
count(distinct left(x, 9)) / total
count(distinct left(x, 8)) / total ≈ 60%
count(distinct left(x, 9)) / total ≈ 70%
count(distinct left(x, 10)) / total ≈ 85%
count(distinct left(x, 11)) / total ≈ 95%
最大百分比占80%上的,就用作前缀索引
缺点
无法利用前缀索引完成排序
show table status; 查看表总记录数
叶金荣(4700963) 21:10:35
slow log
init-file
外键约束
为关联字段创建外键
所有的键都必须唯一
避免使用复合键
外键总是关联唯一的键字段
全文索引
5.6前 只支持myisam引擎
5.5之后,支持innodb引擎
5.7 以前中文支持很差
优先使用lucene\solr\shpinx
索引管理
create index idx on t(c1) using BTREE
create index idx on t(c1) using HASH
HEAP/MEMORY表才能使用hash索引
pt-index-usage原理:查一下slow log或general log的执行计划,给出建议,只是建议
索引如何提高sql效率的
倒数第二条
a表是驱动表
b表是被驱动表
然后以a表的d字段为排序并且有索引,那么无法利用d字段的索引完成排序
a join b
人为指定驱动表有风险,可能导致出来的结果集不一样
a. from之前
b. where之前
c. xxx之前
d. t1之前
e. xxx之后
f. xxx之前
g .t1之后
g和b
from xxx t1 use index(k1) where
myisam索引特点
myisam主键索引
myisam辅助索引
innodb主键索引
innodb辅助索引
myisam和innodb索引对比
myisam是可以用NFS作为共享文件系统,两个实例同时读一个数据文件
一个实例读写,另一个实例只读,做高可用,myisam文件可以多个进程打开myisam文件句柄
f
标签:
原文地址:http://www.cnblogs.com/MYSQLZOUQI/p/5524698.html