欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql 索引失效的情况

程序员文章站 2022-06-02 18:36:32
...
  • 索引是为了提高查询效率而建的,索引并不是越多越好,因为每条索引mysql 都维护一个b+ 树,会增加mysql 开销。多了增删改的效率就会降低。
  • 对于查询频率比较高的字段建立索引,而且该字段的区分度要高于80%。这样才有意义。
  • 查看区分度 count(distinct(book_name))/count(*)
select(select count(distinct(book_name))from book_detail)/(select count(*) from book_detail) as rate;
  • 普通索引(除了主键外的索引)
    • 创建索引
create index index_name table_name(col_name(lenght));

索引失效的情况
查看索引失效 EXPLAIN sql 语句
例如
EXPLAIN SELECT * FROM book_detail WHERE id=123;
mysql 索引失效的情况
type 的值不为all,说明索引有效。
1 使用查询语句的字段类型和数据表中类型不一致,发生了隐式转换
book-cate 是id类型,所以下面的索引失效。

select *  from book_deatail where book_cate="123";
  1. 在条件中使用运算符 +,-,*,/,!
EXPLAIN SELECT * FROM book_detail WHERE book_name != "赢家";

mysql 索引失效的情况

  1. 条件中使用函数的
 SELECT * FROM book_detail WHERE  DATE(pub_date)= "1999-7-1";
  1. 使用or ,如果or 连接的是相同的字段类型不失效,否则失效,book_name 和 author 都是varchar 类型就不会失效
SELECT * FROM book_detail WHERE  book_name="债权人" OR author="胡震生";
  1. 使用模糊查找的,索引失效
SELECT * FROM book_detail WHERE  book_name LIKE "_权人";
  1. not in 会导致索引失效,in 不会
SELECT * FROM book_detail WHERE  book_name IN ("离婚","投行风云");

mysql 索引失效的情况
7 is not null 索引失效。

SELECT * FROM book_detail WHERE  book_name IS NOT NULL;

mysql 索引失效的情况

相关标签: 数据库