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,可以考虑分组去重
  • 相关阅读:
    javascript中万恶的function
    Windows7下如何安装部署秋色园CYQBlog源码V1.0网站
    Extjs2.2:Panel里面嵌入Excel表格
    Extjs做界面很酷;感谢博客园给我一个展示的机会;借此向大家展示一下EXTJS的魅力
    16Aspx.com改进版Extjs简单版酒店管理系统提供下载!
    Ext2.2+ASP.NET开发框架已完成欢迎大家下载!
    Extj+Asp.net开发框架V1.1树的操作
    Ext2.2程序开发实战(1)登录界面
    扩展欧几里得定理
    C语言 统计整数二进制表示中1的个数
  • 原文地址:https://www.cnblogs.com/-zzc/p/13618841.html
Copyright © 2011-2022 走看看