zoukankan      html  css  js  c++  java
  • Mysql索引总结(一)

    数据库开发中索引的使用占了很重要的位置,好的索引会使数据库的读写效率加倍,烂的索引则会拖累整个系统甚至引发灾难。

    索引分三类:

    index ----普通的索引,数据可以重复

    unique ----唯一索引,唯一索引,要求所有记录都唯一

    primary key ----主键索引,也就是在唯一索引的基础上相应的列必须为主键

    一般的创建索引的语句如下:

       ALTER TABLE tb_name ADD INDEX index_name (column_list)
      ALTER TABLE tb_name ADD UNIQUE index_name (column_list)
      ALTER TABLE tb_name ADD PRIMARY KEY index_name (column_list)

    <=,=,>,>=,BETWEEN,IN 以及不以% _ 开头的like 语句使用索引。

    为证实like处理方法以下为一个简单的测试:

    create table tb_test(fval varchar(50));

     先不添加索引,随机插入100W 条记录,并测试like 的查询速度。

    CREATE DEFINER=`root`@`localhost` PROCEDURE `P_teset`()
    BEGIN
            DECLARE v_val VARCHAR(20);
        DECLARE v_str VARCHAR(20);
            DECLARE v_i INT ;
            DECLARE v_j INT;    
        
        SET v_str ='abcdefghijklmnopqrstuvwxyz';
            SET v_i=0;
            SET v_j=0;
            
            WHILE v_i<1000000 DO 
               SET v_val ='';
               
               WHILE v_j< 13 DO 
                  SET v_val= CONCAT(v_val,SUBSTRING(v_str,1,FLOOR(1+RAND()*26)));               
                  SET v_j=v_j+1;           
               END WHILE;
               SET v_j=0;
               INSERT INTO tb_test(fval)
               VALUES(v_val);     
    
               SET v_i =v_i+1;              
            END WHILE;
        END$
    
    DELIMITER ;

    使用前后% 测试like 查询速度:

    SELECT *
    FROM tb_test 
    WHERE fval LIKE '%ab';

    0231条 用时0.531s

    SELECT *
    FROM tb_test 
    WHERE fval LIKE 'ab%'

    961406条用时1.422s

    下面加入索引:

    ALTER TABLE tb_test ADD INDEX  my_index(fval); 

    再次测试like 的查询速度:

    SELECT *
    FROM tb_test 
    WHERE fval LIKE '%ab';

    70231条 用时1.094s

    SELECT *
    FROM tb_test 
    WHERE fval LIKE 'ab%'

    961406条用时1.485s

    表为MyISAM格式。 可以看到加了索引后查询的效率并未得到提升。再使用 explain 关键字查看 like 'ab%' 的运行情况:

  • 相关阅读:
    洛谷 AT2000 Leftmost Ball
    洛谷 P1326 足球
    洛谷 P4868 Preprefix sum
    洛谷 P2596 [ZJOI2006]书架
    HDU 3415 Max Sum of Max-K-sub-sequence
    洛谷 P3901 数列找不同
    洛谷 P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀…
    洛谷 P5749 [IOI2019]排列鞋子
    验证码解决表单重复的原理
    session和浏览器之间的技术内幕
  • 原文地址:https://www.cnblogs.com/tingbogiu/p/5623350.html
Copyright © 2011-2022 走看看