数据库开发中索引的使用占了很重要的位置,好的索引会使数据库的读写效率加倍,烂的索引则会拖累整个系统甚至引发灾难。
索引分三类:
index ----普通的索引,数据可以重复
unique ----唯一索引,唯一索引,要求所有记录都唯一
primary key ----主键索引,也就是在唯一索引的基础上相应的列必须为主键
一般的创建索引的语句如下:
[sql]
view plain
copy
- 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处理方法以下为一个简单的测试:
[sql]
view plain
copy
- create table tb_test(fval varchar (50));
先不添加索引,随机插入100W 条记录,并测试like 的查询速度。
[sql]
view plain
copy
- 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 查询速度:
[sql]
view plain
copy
- SELECT *
- FROM tb_test
- WHERE fval LIKE '%ab' ;
70231条 用时0.531s
[sql]
view plain
copy
- SELECT *
- FROM tb_test
- WHERE fval LIKE 'ab%'
961406条用时1.422s
下面加入索引:
[sql]
view plain
copy
- ALTER TABLE tb_test ADD INDEX my_index(fval);
再次测试like 的查询速度:
[sql]
view plain
copy
- SELECT *
- FROM tb_test
- WHERE fval LIKE '%ab' ;
70231条 用时1.094s
[sql]
view plain
copy
- 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';
发表评论
-
MySQL索引(2)
2012-03-03 10:36 0例如,user表中有user_id,user_name两个字段 ... -
SQL SERVER批量插入相同的数据--懒人方法
2012-03-03 10:34 0SQL SERV ... -
整理:sql语句优化之SQL Server
2012-03-02 21:38 0整理:sql语句优化之SQL Server ... -
【转载】JS 中如何将字符串转化成日期&&日期格式化方法
2012-03-02 21:32 0【转载】JS 中如何 ... -
关于多表连接的问答
2012-03-02 21:25 0<!--StartFragment --> ... -
SQL Server 查询处理中的各个阶段(SQL执行顺序)
2012-03-02 21:06 0SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。 ... -
sql 删除重复记录实现方法
2012-03-02 15:26 0sql 删除重复记录实现方法"重复记录"有两个意义上 ... -
Mysql约束
2012-03-02 13:23 0注意:MySql中只有键才能定义为 auto_inc ... -
管理索引
2012-03-02 13:15 0时间:2010-11-22 13:30来源: ... -
使用约束
2012-03-02 13:14 733时间:2010-11-22 13:30来源: 作者: 点击: ... -
SQL利用Case When Then多条件判断
2012-03-02 13:11 949SQL利用Case When Then多条件判断 (20 ... -
Mysql复制表结构、表数据
2012-03-02 12:59 790Mysql复制表结构,create table ord ... -
mysql字符窜函数
2012-03-02 12:22 904今天在研究MySQL的函数所以写下了这篇文章:CONCAT。它 ... -
mysql大小写问题
2012-03-02 09:43 642以下的文章主要介绍的是Mysql大小写的某些问题的解决,本文 ...
相关推荐
MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...
### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...
索引(Index)在MySQL中是一种帮助数据库高效获取数据的数据结构。它类似于现实生活中书籍的目录,能够显著提高数据检索的速度。通过索引,数据库可以更快地定位到所需的数据记录,从而减少查询时间。 例如,在查找...
MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,其性能很大程度上取决于存储引擎和索引的选取与使用。本文将深入探讨 MySQL 中的存储引擎和索引技术,帮助优化数据库性能。 首先,MySQL 提供了多种存储...
建立组合索引可以提高查询效率,因为 MySQL 只需要扫描一次索引就可以找到所有相关的记录,而不是扫描所有记录。 5.索引的优点 索引可以带来以下几个优点: * 提高查询速度 * 降低数据库的负载 * 提高数据库的...
#### 一、理解MySQL索引的重要性 索引是数据库性能优化中最常用也是最重要的手段之一。合理的索引设计可以显著提高查询效率,减少服务器资源的消耗。在MySQL中,索引的选择与配置对于开发人员和数据库管理员来说至...
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到...
MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...
【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...
### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...
7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7...
- **索引结构**:MySQL索引通常是以B树形式存储的。B树具有良好的查询性能,即使在大型数据集中也能保持高效的查找能力。 - **索引的组成**:对于每个索引项,MySQL都会保存一个指向实际数据文件中记录位置的“指针...
**MySQL索引**本质上是用来加快数据检索过程的一种数据结构,类似于书籍中的目录。当执行查询时,如果涉及到的列已经建立了索引,MySQL可以通过索引来快速定位到所需数据的位置,从而大大减少查找时间。 - **无索引...
### MySQL索引和锁机制详解 #### 一、索引基础 **索引定义:** 索引是MySQL中用于提高查询效率的一种数据结构。通过索引可以在数据表中快速定位到所需的数据行,大大减少不必要的全表扫描。 **索引的重要性:** 1....
首先,让我们了解什么是MySQL索引。MySQL中的索引是一种特殊的数据结构,它为数据库表中的数据提供了快速访问的途径。常见的索引类型包括B-Tree(默认)、Hash、R-Tree和Full-text等。B-Tree索引是最常见的一种,...