bitsCN.com

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

◆不使用NOT IN和<>操作 bitsCN.com

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql傻瓜教程_mysql索引的使用傻瓜教程_MySQL相关推荐

  1. 在mysql中unique唯一索引的作用_MySQL_MySQL中的唯一索引的简单学习教程,mysql 唯一索引UNIQUE一般用于不 - phpStudy...

    MySQL中的唯一索引的简单学习教程 mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQU ...

  2. mysql索引教程_MySQL教程96-MySQL索引类型

    索引的类型和存储引擎有关,每种存储引擎所支持的索引类型不一定完全相同.MySQL 索引可以从存储方式.逻辑角度和实际使用的角度来进行分类. 存储方式区分 根据存储方式的不同,MySQL 中常用的索引在 ...

  3. mysql索引详细介绍简书_MySql索引详解

    image 常见索引类型(实现层面) 索引种类(应用层面) 聚簇索引与非聚簇索引 覆盖索引 最佳索引使用策略 1.常见索引类型(实现层面) 首先不谈Mysql怎么实现索引的,先马后炮一下,如果让我们来 ...

  4. MySQL中的联合索引学习教程

    MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...

  5. mysql suoyin 和锁_Mysql索引与锁

    Mysql索引与锁 Mysql索引与锁 本文以Mysql5.7为例测试. 1:mysql索引方法 Mysql的索引方法分为btree索引和hash索引. hash索引:是通过hash计算后比较,所以只 ...

  6. mysql 如何看索引命中_mysql索引命中规则讲解

    首先我们来了解一下最左匹配原则,如下: 1.先定位该sql的查询条件,有哪些,那些是等值的,那些是范围的条件. 2.等值的条件去命中索引最左边的一个字段,然后依次从左往右命中,范围的放在最后. 分析讲 ...

  7. 饥荒简单搭建教程与自动维护(傻瓜都能学会)

    饥荒简单搭建教程与自动维护(傻瓜都能学会) 前言 由于开服之后需要花费大量的时间和精力去维护服务器因此自动维护诞生了.这篇教程从搭建饥荒基本环境到开服,最后到自动维护,内容简易,操作简单.(注意使用此 ...

  8. mysql单列索引和多列索引_mysql索引类型 normal, unique, full text

    问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...

  9. mysql多索引结构_MySQL 索引结构

    谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...

最新文章

  1. 如何最大限度提升虚拟内存性能(组图)
  2. Django-认证系统
  3. python数据挖掘电影评分分析_Pyhon数据分析项目——男女电影评分差异比较
  4. 【剑指offer】面试题24:反转链表(Java 实现)
  5. java课设 五子棋_Java课程设计 ————五子棋 (个人博客)
  6. Tomcat服务器报错IOException: Broken pipe
  7. 【NOIP2012】【Luogu1075】质因数分解(模拟)
  8. Atitit 集团与个人的完整入口列表 attilax的完整入口 1. 集团与个人的完整入口列表 1 2. 流量入口概念 2 3. 流量入口的历史与发展 2 1.集团与个人的完整入口列表
  9. Java入门书籍推荐
  10. 罗永浩直播带货卖了1.1亿,更高级的自我认知【附直播卖货商业计划书PPT】
  11. 正则表达式(正则表达式的方法和属性、正则的修饰符、表达式、元字符、量词)
  12. Android 面试题集 答案,助你拿到心仪 Offer
  13. 带宽单位和下载速度的换算
  14. 简单易学的win10安装教程,值得收藏
  15. 蚂蚁金服智能推荐引擎解决方案与实践
  16. linux安装ati工具,Ubuntu 12.10 安装ATI显卡驱动安装
  17. window.XMLHttpRequest
  18. CPU+GPU异构计算编程简介
  19. python中途岛海战boss发射子弹类设计程序
  20. JavaScript中的onunload不能用的解决办法

热门文章

  1. 电脑功耗测试软件_电脑“烤机”怎么测?用这几款软件就对了
  2. java上下左中右的布局面板_JAVA GUI重要知识点学习心得
  3. Fragment学习1--生命周期
  4. 闪屏页新手引导页面主页判断跳转的逻辑
  5. Linux基础命令---查找进程id
  6. [HNOI2006]最短母串问题——AC自动机+状压+bfs环形处理
  7. 移动端web开发技巧
  8. mysql字段A复制到字段B,并替换指定字符
  9. AppStore新应用上传指南
  10. 2680 Problem F: Coin Game