MySQL索引(一)

MySQL索引(一)

分类: 数据库相关 24人阅读 评论 (0) 收藏 举报

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

             索引分三类:

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

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

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

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

 

  1.    ALTER   TABLE  tb_name  ADD   INDEX  index_name (column_list)  
  2.   
  3. ALTER   TABLE  tb_name  ADD   UNIQUE  index_name (column_list)  
  4.   
  5. ALTER   TABLE  tb_name  ADD   PRIMARY   KEY  index_name (column_list)  

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

 

 

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

 

  1. create   table  tb_test(fval  varchar (50));  


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

 

  1. CREATE  DEFINER=`root`@`localhost`  PROCEDURE  `P_teset`()  
  2. BEGIN   
  3.         DECLARE  v_val  VARCHAR (20);  
  4.     DECLARE  v_str  VARCHAR (20);  
  5.         DECLARE  v_i  INT  ;  
  6.         DECLARE  v_j  INT ;      
  7.       
  8.     SET  v_str = 'abcdefghijklmnopqrstuvwxyz' ;  
  9.         SET  v_i=0;  
  10.         SET  v_j=0;  
  11.           
  12.         WHILE v_i<1000000 DO   
  13.            SET  v_val = '' ;  
  14.              
  15.            WHILE v_j< 13 DO   
  16.               SET  v_val= CONCAT(v_val, SUBSTRING (v_str,1,FLOOR(1+RAND()*26)));                 
  17.               SET  v_j=v_j+1;             
  18.            END  WHILE;  
  19.            SET  v_j=0;  
  20.            INSERT   INTO  tb_test(fval)  
  21.            VALUES (v_val);       
  22.   
  23.            SET  v_i =v_i+1;                
  24.         END  WHILE;  
  25.     END $  
  26.   
  27. DELIMITER ;  

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

  1. SELECT  *  
  2. FROM  tb_test   
  3. WHERE  fval  LIKE   '%ab' ;  

70231条 用时0.531s

  1. SELECT  *  
  2. FROM  tb_test   
  3. WHERE  fval  LIKE   'ab%'   

961406条用时1.422s

 

下面加入索引:

  1. ALTER   TABLE  tb_test  ADD   INDEX   my_index(fval);   


再次测试like 的查询速度:

  1. SELECT  *  
  2. FROM  tb_test   
  3. WHERE  fval  LIKE   '%ab' ;  

70231条 用时1.094s

  1. SELECT  *  
  2. FROM  tb_test   
  3. WHERE  fval  LIKE   'ab%'   

961406条用时1.485s

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

EXPLAIN
SELECT *
FROM tb_test IGNORE INDEX(my_index)
WHERE fval LIKE '%ab';


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

你可能感兴趣的:(mysql)