zoukankan      html  css  js  c++  java
  • MySQL索引

    什么是索引?

    排好序快速查找的数据结构就是索引

    索引作用

    提高检索效率,降低数据库对IO成本;降低数据排序,减少cpu消耗

    索引类型

    单值索引:一个索引包含单个列,一个表可以有多个单值索引
    
    唯一索引:索引值必须唯一,但允许有空值
    
    复合索引:一个索引包含多个列

    基本语法

    创建索引
    
    CREATE [UNIQUE](唯一) INDEX  indexname(索引名称) ON tablename(表名) (columnname(length)字段和类型)  
    
    该命令可以添加普通索引或唯一索引[UNIQUE]
    
    或者
    
    ALTER TABLE tablename ADD PRIMARY KEY (columnname_list)                          ---主键索引
    
    ALTER TABLE tablename ADD  INDEX  UNIQUE  indename(columnname_list)     ---唯一索引
    
    ALTER TABLE tablename ADD  INDEX  indename(columnname_list)                      ---普通索引
    
    ALTER TABLE tablename ADD  INDEX  FULLTEXT indename(columnname_list)   ---全文索引
    
    删除索引
    
    DROP INDEX [indexname]  ON table
    
    查看索引
    
    SHOW INDEX FROM  table 

    那些情况需要创建索引

    主键自动创建索引
    频繁作为查询条件的字段
    连表关联的字段,外键关系创建索引
    高并发下创建复合索引
    where字段
    排序的字段
    查询中统计或分组的字段
    如果表记录太少,经常增删改的表,某列字段重复数据较多就不要建立索引

    索引优化

    1.索引有多列时,遵循左前法则;顺序从左开始且不要跳过中间的索引,否则索引失效全盘扫描(带头大哥不能死,中间兄弟不能断)
    3.不要再索引列上做任何操作,包括计算、函数、自动或者手动类型转换,否则导致索引失效(索引列上无计算)
    4.范围条件查询之后的索引全部失效,使用范围查询时,有时会使用索引,有时会失效,这是因为使用范围条件的数据量有一定的范围(范围之后全失效)
    5.索引列尽量和查询列一致,减少select *
    6.使用“<>”或“!=”导致索引失效
    7.is null,is not null也会导致索引失效
    8.like的“%”在右边不会导致索引失效;查询的列匹配索引列,使用like ‘%xxx%’索引不会失效(like%加右边)
    9.字符串不加单引号或导致索引失效(字符串里有引号)
    10.or用来连接时导致索引失效,但是可以把or用union all代替

    关联查询优化

    保证被驱动表的join字段已经被索引
    left join 时,选择小表作为驱动表,大表作为被驱动表
    inner join 时,mysql会自己帮你把小结果集的表选为驱动表
    子查询尽量不要放在被驱动表,有可能使用不到索引

    子查询优化

    在使用"in"时,用大表驱动小表,"exists"时用小表驱动大表

    order by关键字优化

    ORDER BY子句,尽量使用Index方式排序,避免使用FileSort方式排序
    尽可能在索引列上完成排序操作,遵照索引建的最佳左前缀
    where子句中如果出现索引的范围查询(即explain中出现range)会导致order
    by 索引失效。

    group by关键字优化

    group by实质是先排序后进行分组,遵照索引建的最佳左前缀
    where高于having,能写在where限定的条件就不要去having限定了。
    当无法使用索引列,增大max_length_for_sort_data参数的设置
    +增大sort_buffer_size参数的设置
    尽量不要使用
    distinct,可以考虑分组去重
  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/-zzc/p/13618841.html
Copyright © 2011-2022 走看看