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

    几乎所有的索引都是建立在字段之上.

    索引: 系统根据某种算法, 将已有的数据(未来可能新增的数据),单独建立一个文件: 文件能够实现快速的匹配数据, 并且能够快速的找到对应表中的记录. 

    索引的意义

    1. 提升查询数据的效率

    2. 约束数据的有效性(唯一性等)

    增加索引的前提条件: 索引本身会产生索引文件(有时候有可能比数据文件还大) ,会非常耗费磁盘空间.

    如果某个字段需要作为查询的条件经常使用, 那么可以使用索引(一定会想办法增加);

    如果某个字段需要进行数据的有效性约束, 也可能使用索引(主键,唯一键)

     

    Mysql中提供了多种索引

    1. 主键索引: primary key

    2. 唯一索引: unique key

    3. 全文索引: fulltext index

    4. 普通索引: index

    5. 外键索引: foreign key

    6. 复合索引:key (最左前缀原则)

     

    全文索引: 针对文章内部的关键字进行索引

    全文索引最大的问题: 在于如何确定关键字

    英文很容易: 英文单词与单词之间有空格

    中文很难: 没有空格, 而且中文可以各种随意组合(分词: sphinx)

     

    什么情况下有索引,但用不上

    1. 条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。

    2. 对于多列索引,第一个索引没有使用,则不会使用索引。例如索引是key index (a,b,c). 可以是a | a,b| a,b,c 3种组合进行查找,但使用b,c不会使用索引。

    3. like查询是以%或 _开头不会使用,% 或 _可以放在后面。

    4. 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

    5. where 子句里对索引列上有数学运算,用不上索引。

    6. where 子句里对有索引列使用函数,用不上索引。

    7. 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

    8. 避免在索引字段上使用函数,否则会导致查询时索引失效。
     
    相关文章:  
  • 相关阅读:
    浅谈协方差矩阵
    Android开发之Http通信HttpClient接口
    Android开发之XML文件的解析的三种方法
    Android开发之Http通信HttpURLConnection接口
    [Android] SurfaceView使用实例
    Android开发之初识Camera图像采集
    Android开发之SurfaceView
    基于android的远程视频监控系统
    Android编程9:蓝牙测试
    Android--PendingIntent 实现发送通知notification
  • 原文地址:https://www.cnblogs.com/xuey/p/13052462.html
Copyright © 2011-2022 走看看