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

索引分三类:

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%' 的运行情况:

最新文章

  1. Lesson 14 Do you speak English?
  2. 纠结于搞.Net待遇不高的同学入...
  3. English Training Material - 04
  4. UVA 100 The 3*n+1 problem
  5. 前N个自然数的随机置换
  6. eclipse内使用tomcat项目究竟被部署到了哪里
  7. Entity FrameWork知识点汇总
  8. oracle数据库敏感操作前创建还原点
  9. xml的加密和解密
  10. poj 3259Wormholes (spfa最短路径)
  11. 【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
  12. 浅谈测试rhel7新功能时的感受及遇到的问题【转载】
  13. 对return函数的认识
  14. centos7内核升级及curl访问https证书过期处理
  15. b/s 和c/s的区别
  16. Python 学习 第十三篇:数据的读写-文件、DataFrame、json
  17. boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)
  18. 2018.4.25-ml笔记(梯度下降)
  19. django 拷贝一个 model 实例
  20. 阿里巴巴开源项目: canal

热门文章

  1. 【Android开发学习笔记】【高级】【随笔】插件化——Activity生命周期
  2. C++ 安全字符串拼接
  3. 执行动态sql返回参数
  4. android Listview item 中有button,item就不响应触摸事件
  5. C++ Primer Pluse_6_课后题
  6. Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性
  7. JQuery 可见性过滤选择器
  8. imx6 RGB LCD
  9. sell-- 英文网站产品显示404?
  10. Failed to load PDF in chrome/Firefox/IE