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. 避免在索引字段上使用函数,否则会导致查询时索引失效。
     
    相关文章:  
  • 相关阅读:
    fread 和 read的区别
    Windows下的linux开发环境Cygwin的安装配置
    开机出现grub提示符后怎样进入系统?
    Matlab中函数句柄的优点
    UNIX环境高级编程的apue.h源码APUE
    装了一个ubuntu10.10,打印机不能添加了,
    迅雷上如何下载热映的电影大片~~
    我的linux 初始配置安装的东东,最好保存上一份,对于经常装linux的朋友
    HDU 1875 畅通工程再续
    HDU 1874 畅通工程续
  • 原文地址:https://www.cnblogs.com/xuey/p/13052462.html
Copyright © 2011-2022 走看看