听“兄弟连”视频笔记
1、索引是mysql 中最重要的优化方式,它能解决mysql大部分的性能问题。
2、索引的分类
MYISAM引警中索引和数据文件是分开存储的
INNODB引擎中索引和数据文件是存在同一个文件中的,但可以分成多个文件存储。
mysql 暂不支持函数索引,但可以对一个字段的部分位进行索引。
3、mysql 如使用索引何
一、使用索引
1)、使用索引: 对于创建的多列索引,只要查询条件中用到最左边的列,索引一般会被用到。
2)、使用like的查询,后面如果是常量且只有%号不在第一个字符,索引才可能会被使用。
3)、如果对大的文本进行搜索,使用全文索引而不使用 like "%.....%".
4)、如果列名是索引,使用column_name is null 将使用索引。
二、存在索引但不使用索引
1)、如果mysql估计使用索引比全表扫描更慢,则不使用索引。例如如果列key_part1均匀分布在1到100之间,查询时使用索引就是很好
2)、如果使用memory/heap表并且where 条件中不使用=进行索引列,那么不会使用索引。heap表只有=条件下会使用索引。
3)、用or分割开的条件,如果or前面的条件中的列有索引,而后面的列中没有索引,那么涉及的索引不会被用到。
4)、如果不是索引列的第一部分,那么在查询中这个索引也不会被mysql采用。
5)、如果like是以%开始,那么mysql 也不会采用这个索引。
6)、如果列类型是字符串,但在查询时把一个数值型常量赋值给了一个字符型的列名name,也用不到索引。
3、查看索引使用情况
show status like "handler _read%"
handler_read_key :代表一个行被 索引值读的次数。
4、分析表和检查表
1)、检 查一个或者多个表是否有错误 check table tbl_name
2)分析表
5、常用SQL的优化
1)、大批量插入数据
load data infile "/tmp/text.txt" into table t1(name)
这样只是把表数据导出来,不包含结构
2)、大批量导出数据
select name from t1 outfile "/tmp/test.txt";
3)、导数据时把非唯一索引关闭会更快(cf)
alter table tbl_name disable keys
loading the data
alter table tbl_name enable keys.
注:对innoDB无效。