数据库索引
01.在创建索引的时候都会考虑哪些因素呢? :对于查询概率比较高,经常作为where条件的字段设置索引。
02.做联合索引多个字段之间顺序你们是如何选择的呢? :识别度最高的字段放到最前面。在创建多列索引时,我们根据业务需求,where子句中使用最频繁的一列放在最左边,因为MySQL索引查询会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引最 左边开始匹配。所以当我们创建一个联合索引的时候,如(key1,key2,key3),相当于创建了(key1)、(key1,key2)和(key1,key2,key3)三个索引,这就是最左匹配原则。
1.为什么要用索引?当一个表中有上千万条数据,如果按名字一行一行去匹配查找,全表扫描,效率会很慢。这时候就需要用索引,相当于给表加了目标和标题,可以缩小查找范围和加快查找速度。
2.什么是索引? 索引是一种数据结构。一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree和Hash索引)。索引是在表的列上创建。所以,要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中。
3.Hash索引的优缺点? 优点:哈系索引的工作方式是将列的值作为索引的键值(key),和键值相对应实际的值(value)是指向该表中相应行的指针位置。查新name=“jes”这样的sql效率很快,等值查询的场景更快。
缺点:1.哈希表是无顺的数据结构,假如你想要找出所有小于40岁的员工 就不能用哈希索引。
2.哈希索引不支持多列联合索引的最左匹配规则 如果有大量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题。
4.B-Tree索引是怎么提升性能? :假设我们在 Employee_Name这一列上创建一个B-Tree索引。这意味着当我们用之前的SQL查找姓名是‘Jesus’的雇员时,不需要再扫描全表。而是用索引查找去查找名字为‘Jesus’的雇员,因为索引已经按照按字母或者数字顺序排序。索引已经排序意 味着查询一个名字会快很多,因为名字少字母为‘J’的员工都是排列在一起的。另外重要的一点是,索引同时存储了表中相应行的指针以获取其他列的数据。
5.使用数据库索引会有什么代价? :缺点呢?其一,索引会占用空间 – 你的表越大,索引占用的空间越大。其二,性能损失(主要值更新操作),当你在表中添加、删除或者更新行数据的时候, 在索引中也会有相同的操作。记住:建立在某列(或多列)索引需要保存该列 最新的数据。基本原则是只如果表中某列在查询过程中使用的非常频繁,那就在该列上创建索引。
6.B+ Tree的叶子节点都可以存哪些东西吗? :InnoDB的B+ Tree可能存储的是整行数据,也有可能是主键的值。
7.整行数据,也有可能是主键的值区别? :在 InnoDB 里,索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引。而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引。 聚簇索引查询会更快。因为主键索引树的叶子节点直接就是我们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询。
8.为什么聚簇索引查询会更快? :因为主键索引树的叶子节点直接就是我们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询(通常称为回表)。而且,非主键索引不一定会查询多次,通过覆盖索引也可以只查询一次。
9.覆盖索引(covering index)指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。
10.MySQL 5.6新加了什么优化?:引入了索引下推优化,默认开启。 2.在people表中(zipcode,lastname,firstname)构成一个索:SELECT * FROM people WHERE zipcode=’95054′ AND lastname LIKE ‘%etrunia%’ AND address LIKE ‘%Main Street%’;
如果没有使用索引下推技术,则MySQL会通过zipcode=’95054’从存储引擎中查询对应的数据,返回到MySQL服务端,然后MySQL服务端基于lastname LIKE ‘%etrunia%’和address LIKE ‘%Main Street%’来判断数据是否符合条件。 如使 用了索引下推技术,则MYSQL首先会返回符合zipcode=’95054’的索引,然后根据lastname LIKE ‘%etrunia%’和address LIKE ‘%Main Street%’来判断索引是否符合条件。如果符合条件,则根据该索引来定位对应的数据,如果不符合,则直接reject掉。 有了索引下推优化,可以在有like条件查询的情况下,减少回表次数。
11.怎么查看索引是否生效? :通过explain查看sql语句的执行计划,通过执行计划来分析索引使用情况。
12.什么情况下会发生明明创建了索引,但是执行的时候并没有通过索引呢? :
相关文章