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)
             MySQL 中会对 <,<=,=,>,>=,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';
70231条 用时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%' 的运行情况:

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



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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值