• MySQL索引


        一、为什么要使用索引

              优化查询,减少扫描的表行数。打个比方,索引的作用就和查新华字典,字典的索引的作用的一样的。

       二、索引的类型

            1、索引是在存储引擎中实现的,而不是在服务器层中实现的。所以,每种存储引擎的索引都不一定完全相同,并不是所有的存储引擎都支持所有的索引类型。

            2、如果使用的是组合索引(即有多个列),需要满足 ”最左前缀“ 的 规则,这和索引的存储方式 B-tree有关。

                 参照:最左前缀原则

       三、索引的长度

            desc或者explain命令可以查看索引的key_len:

    +----+-------------+-------+------+---------------+----------+---------+----------------------------+-------+-------+
    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
    +----+-------------+-------+------+---------------+----------+---------+----------------------------+-------+-------+
    | 1 | SIMPLE | cry | ALL | NULL | NULL | NULL | NULL | 64733 | NULL |
    | 1 | SIMPLE | zd | ref | cry_brzd | cry_brzd | 153 | hospitalinfection.cry.ZYID | 1 | NULL |
    +----+-------------+-------+------+---------------+----------+---------+----------------------------+-------+-------+

       key_len为:153 

       gbk的编码一个字符两个字节,而utf8编码的一个字符三个字节。笔者的数据库是utf8编码,建立索引的字段类型为varchar(50):所以,长度为50*3+3=153
     
       四、索引的不足之处
        1、降低了更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
        2、建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。
        3、.......
     
       五、其他
         1、有些查询情况下mysql 是不会使用索引的,即使建立了索引:            

         SELECT * FROM mytable WHERE username like'admin%' ——未使用索引    

         SELECT * FROM mytable WHEREt Name like'%admin'———使用了索引

         2、对查询列使用了mysql函数,或者使用了 not in 、<>等操作符。

         3、全文检索的索引可以建立在text或者varchar字段上面,配合match...against使用,如果想要匹配中文的话,需要使用分词器,或者通过pingyin4j这类库将汉字转化为拼音,再匹配 etc.

         4、......

     

         

     
  • 相关阅读:
    Convert to a source folder or rename it.
    git revert 后悔了 还原修改前的版本 + git 常用命令
    android switch语句报错:case expressions must be constant expressions
    解读ContentResolver和ContentProvider
    sdk命令
    向Android模拟器中批量导入通讯录联系人
    Rational Rose2007下载安装教程以及问题处理
    java代码打包成jar以及转换为exe
    Timusoj 1982. Electrification Plan
    poj 3254 Corn Fields
  • 原文地址:https://www.cnblogs.com/drcoding/p/4368892.html
Copyright © 2020-2023  润新知