mysql
sql
缓存
服务器
当发起一个索引覆盖查询时,在explain的extra列能够看到using index的信息优化
覆盖索引的坑:mysql查询优化器会在执行查询前判断是否有一个索引能进行覆盖,假设索引覆盖了where条件中的字段,但不是整个查询涉及的字段,mysql5.5和以前的版本也会回表获取数据行,尽管并不须要这一行且最终会被过滤掉。spa
操作系统
2.mysql不能在索引中执行LIke操做。mysql能在索引中作最左前缀匹配的like比较,可是若是是通配符开头的like查询,存储引擎就没法作比较匹配。这种状况下mysql只能提取数据行的值而不是索引值来作比较设计
优化后SQL:添加索引(artist,title,prod_id),使用了延迟关联(延迟了对列的访问)
说明:在查询的第一阶段可使用覆盖索引,在from子句中的子查询找到匹配的prod_id,而后根据prod_id值在外层查询匹配获取须要的全部值。3d
5.5时API设计不容许mysql将过滤条件传到存储引擎层(是把数据从存储引擎拉到服务器层,在根据条件过滤),5.6以后因为ICP这个特性改善了查询执行方式blog