第十八集 mysql 索引优化

听“兄弟连”视频笔记

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无效。



               

       

    







       



     



你可能感兴趣的:(优化,mysql,index)