索引相关面试

 

索引

主要讲述索引概念、索引种类、索引原理、使用索引需要注意的问题,以及如何开启索引的慢日志

什么是索引,索引的优缺点,索引的选择性

它是数据库中一列或者多列值进行排序的一种结构,用于包含数据表中所有记录的引用指针

优点:极大的提高搜索的速率;

缺点:提出索引就需要对其进行维护,成本较高;

索引的选择性:索引的不重复的索引值占数据库所有记录的比例,如果所有的选择性越高,那么索引的性能就越好,唯一索引就是如此;

索引的原理

  • 首先创建索引的内容并进行排序;
  • 把排序的结果倒排,并拼接数据的地址;
  • 查询时会先拿到索引的内容后通过地址来拿到具体的数据;
  • 索引的默认值不要设置为null,否则无效;
  • 不使用负匹配的规则作用于索引,比如不使用 not in ,而是用 not exists代替,并且使用以下的运算符会停止索引的匹配:!= like < > 等;
  • 不要在索引的列上进行运算,可以先对数据进行运算,然后在与索引列的数据进行比较;
  • 定义有外键的列建议建立索引;
  • 数据库类型为text、longtext、bit尽量不要建立索引,考虑:如果非要对比较长的字符串进行加索引,可以先对字符串进行hash求值,然后在加索引,或者索引开始的部分字符,;
  • 索引遵循最左前缀匹配的规则,要求如下:

创建索引需要注意的问题

1.索引的作用从左到右依次递减,经常创建索引把最常用的列放在左边;

2.如果本列更新比较频繁,不建议建立索引;

3.重复值较多的不建议建立索引,例如性别等;

索引的种类

  • 普通索引:是一种最基本的索引,没有任何限制;

创建索引:create index index_name on table_name(column_name(length));

添加索引:alter table_name add idnex index_name on (column_name(length));

删除索引:drop index index_name on table_name;

  • 唯一索引:唯一的要求是索引值必须唯一,一般为表的主键设置,允许有空值;

创建索引:create unique index index_name on table_name(column_name(length));

添加索引:alter table_name add unique idnex index_name on (column_name(length));

删除索引:drop unique index index_name on table_name;

  • 主键索引:要求是索引值是唯一的,且不允许有空值,一般是在表的设计时,primary key(‘column_name’);
  • 组合索引:在多个列上创建的索引,遵循最左前缀的原则;
  • 全文索引:主要用于查询文本中的关键字,一般是在fulltext字段,目前只能是char,varchar,text字段能够使用;(关键字fulltext)

创建索引:create fullindex index_name on table_name(column_name);

添加索引:alter table_name add fulltext index_name on (column_name);

删除索引:drop fulltext index_name on table_name;

mysql如何开启慢日志

  • 找出安装目录下的my.ini文件
  • slow_query_log = on
  • slow_query_path = 慢日志文件存放的路径;
  • long_query_time = 60 阈值的设定(如果查询的时间大于此设定的时间,则会记录);

猜你喜欢

转载自www.cnblogs.com/zxx-813/p/9287486.html