zoukankan      html  css  js  c++  java
  • 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、......

     

         

     
  • 相关阅读:
    构建布局良好的Windows程序
    新认知之WinForm窗体程序
    分组查询之牛刀小试!
    Azure虚拟机时间同步问题
    关闭同一网络内的windows主机
    关于jdbc和数据库连接池的关系(不是封装的关系)
    spring,springMVC的优点和区别
    从新向你学习javase(第一天)
    spring包
    事物
  • 原文地址:https://www.cnblogs.com/drcoding/p/4368892.html
Copyright © 2011-2022 走看看