mysql索引的使用傻瓜教程

mysql教程:索引的使用

1. 索引(index)是帮助MySQL高效获取数据的数据结构。

 它对于高性能非常关键,但人们通常会忘记或误解它。

 索引在数据越大的时候越重要。规模小、负载轻的数据库即使没有索引,也能有好的性能,  但是当数据增加的时候,性能就会下降很快。

Tip:蠕虫复制,可以快速复制大量的数据

例:insert into emp select * from emp; 

2. MySQL中常见的索引

 ◆普通索引 

 ◆唯一索引 

 ◆主键索引  

 ◆组合索引 

 ◆全文索引

 ◆外键 (只有innodb存储引擎才支持)

2.1普通索引:

这是最基本的索引,它没有任何限制。有以下几种创建方式:

有以下几种创建方式:

◆创建索引

  CREATE INDEX indexName ON tablename(username(length)); 

◆修改表结构

  ALTER tablename  ADD INDEX indexName (username(length))

Tip:length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length ,下同

 ◆创建表的时候直接指定

 CREATE TABLE mytableuuu(   ID INT NOT NULL, username VARCHAR(16) NOT NULL,   INDEX indexName (username(length))   );  

 CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL);

 create index index1 on mytable(id);  //创建普通索引

 

◆删掉索引:

  drop index index1 on mytable;

有一个概念,

行定义:在声明字段(列)的时候定义的,比如primary key

表定义:在所有字段(列)声明完之后定义的,比如primary key,index

CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL,index index1(username));

3.0唯一索引(unique)

索引列的值必须唯一,但允许有空值。

1)创建索引:Create UNIQUE INDEX indexName ON tableName(tableColumns(length))

2)修改表结构:Alter tableName ADD UNIQUE [indexName] ON (tableColumns(length)

3)创建表的时候直接指定:Create TABLE tableName ( [...], UNIQUE [indexName](tableColumns(length)); 

4.0主键索引(primary  key)

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );  

当然也可以用 ALTER 命令。

Tip:记住:一个表只能有一个主键。主键索引就是我们所说的主键。在一个表中,主键只能有一个,但是普通索引和唯一索引可以有多个。

5.0组合索引

5.1多列索引,由多个列共同来组成一个索引。

增加组合索引

alter table mytable add index name_city_age(username,city,age);

对于组合索引,必须以最左索引为前缀,依次排列的,才可以使用到组合索引,中间不能有间隔。

下面的可以使用到组合索引:

  ◆ username,city,age   

  ◆ usernname,city   

  ◆ usernname 

下面的不可以使用到组合索引:

  ◆ city,age   

  ◆ city   

  ◆ age 

注意组合索引,如果在某个表中,有多个索引,我们可以考虑一下,使用组合索引来优化。

5.2 Explain语句:可以查询sql 查询语句使用的索引类型

 

6. 为什么有索引,查询加快?

6.1在MySQL中,BTREE,二叉树

 

二叉树排序

35   17  39 9 28 65 56 87

                                    

6.2索引的优点:

加快查询速度。

6.2 索引的缺点:

占用大量的磁盘空间。

但是对插入、删除和更新有影响。

 

6.3使用索引时,有以下一些技巧和注意事项:

◆索引不会包含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

◆使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

◆索引列排序

MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

◆like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引,而like “aaa%”可以使用索引。

◆不要在列上进行运算

select * from users where YEAR(adddate)<2007; 将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成

select * from users where adddate<‘2007-01-01’; 

◆不使用NOT IN和<>操作

http://www.php100.com/html/webkaifa/database/Mysql/2013/0316/12223.html

时间: 2024-12-12 16:38:34

mysql索引的使用傻瓜教程的相关文章

美团网技术团队分享的MySQL索引及慢查询优化教程_Mysql

MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,

快速学习MySQL索引的入门超级教程_Mysql

所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论; Explain优化查询检测 EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语

LuManager图文安装使用教程和创建MysqL快速建站基本教程_Linux

LuManager也简称是LUM,是一套国产的Linux和Unix服务器管理软件,支持Nginx.Tengine.Apache,可以切换PHP5.2X和PHP5.3X,快速创建网站.MysqL数据库.域名绑定等建站功能齐全,程序还附带了一些PHP和服务器优化功能. LuManager支持FreeBSD.Debian.Centos.Ubuntu,选择快速安装整个过程不到十几分钟,特别适合那种刚刚接触Linux类VPS的朋友建站使用,至于LuManager在占用VPS内存和运行效率这一块,小内存的V

使用MYSQL索引

    关系数据库的世界是一个表与集合.表与集合上的运算占统治地位的世界.数据库是一个表的集合,而表又是行和列的集合.在发布一条SELECT 查询从表中进行检索行时,得到另一个行和列的集合.这些都是一些抽象的概念,对于数据库系统用来操纵表中数据的基本表示没有多少参考价值.另一个抽象概念是,表上的运算都同时进行:查询是一种概念性的集合运算,并且集合论中没有时间概念.当然,现实世界是相当不同的.数据库管理系统实现了抽象的概念,但是在实际的硬件    范围内要受到实际的物理约束.结牵檠ㄊ奔洌

添加mysql索引的3条原则

一,索引的重要性 索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行.表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据.注意如果你需要访问大部分行,顺序读取要快得多,因为此时我们避免磁盘搜索. 假如你用新华字典来查找"张"这个汉字,不使用目录的话,你可能要从新华字典的第一页找到最后一页,可能要花二个小时.字典越厚呢,你花的时间就越多.现在你使用目录来

MySQL索引经验之浅见

mysql|索引 在数据库表中,使用索引可以大大提高查询速度. 假如我们创建了一个testIndex表:CREATE TABLE testIndex(i_testID INT NOT NULL,vc_Name VARCHAR(16) NOT NULL); 我们随机向里面插入了1000条记录,其中有一条    i_testID    vc_Name      555    erquan     在查找vc_Name="erquan"的记录SELECT * FROM testIndex W

MySQL索引分析和优化

mysql|索引|优化 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为people的表: CREATE TABL

MySQL 5.0新特性教程 存储过程:第一讲

mysql|存储过程|教程 作者:mysql AB;翻译:陈朋奕 Introduction 简介 MySQL 5.0 新特性教程是为需要了解5.0版本新特性的MySQL老用户而写的.简单的来说是介绍了"存储过程.触发器.视图.信息架构视图",在此感谢译者陈朋奕的努力. 希望这本书能像内行专家那样与您进行对话,用简单的问题.例子让你学到需要的知识.为了达到这样的目的,我会从每一个细节开始慢慢的为大家建立概念,最后会给大家展示较大的实用例,在学习之前也许大家会认为这个用例很难,但是只要跟着

加速PHP动态网站 MySQL索引分析和优化

本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为peo