mysql索引小结

2014-06-09

0

索引

四种索引(主键索引/唯一索引/全文索引/普通索引)CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC] (列部分值作为索引)

列部分值作为索引::

对于CHAR和VARCHAR列,只用一列的一部分就可创建索引。

创建索引时,使用col_name(length)语法,对前缀编制索引。

前缀包括每列值的前length个字符。BLOB和TEXT列也可以编制索引,但是必须给出前缀长度。此处展示的语句用于创建一个索引,索引使用列名称的前10个字符。

CREATE INDEX part_of_name ON customer (name(10));因为多数名称的前10个字符通常不同,所以此索引不会比使用列的全名创建的索引速度慢很多。

另外,使用列的一部分创建索引可以使索引文件大大减小,从而节省了大量的磁盘空间,有可能提高INSERT操作的速度。前缀最长为255字节。对于MyISAM和InnoDB表,前缀最长为1000字节。

注意前缀的限长以字节计,而CREATE INDEX语句中的前缀长度指的是字符的数目。

对于使用多字节字符集的列,在指定列的前缀长度时,要考虑这一点。在MySQL 5.1中:

·         只有当您正在使用MyISAM, InnoDB或BDB表类型时,您可以向有NULL值的列中添加索引。

·         只有当您正在使用MyISAM, BDB或InnoDB表类型时,您可以向BLOB或TEXT列中添加索引。index_type::

部分储存引擎允许在创建索引时指定索引类型。

index_type指定语句的语法是USING type_name。

不同的储存引擎所支持的type_name值已显示在下表中。

如果列有多个索引类型,当没有指定index_type时,第一个类型是默认值。存储引擎允许的索引类型

MyISAMBTREE

InnoDBBTREE

MEMORY/HEAPHASH, BTREE

主键索引::

当一张表,把某个列设为主键的时候,则该列就是主键索引

1,create table testtable

(id int unsigned primary key auto_increment ,

name varchar(32) not null defaul '');2,alter table 表名 add primary key (列名);

普通索引::

一般来说,普通索引的创建,是先创建表,然后在创建普通索引

比如:

create table ccc(

id int unsigned,

name varchar(32)

)create index 索引名 on 表 (列1,列名2);全文索引::

1,FULLTEXT索引只能对CHAR, VARCHAR和TEXT列编制索引,

2,在mysql中fulltext 索引只针对 myisam生效

3,mysql自己提供的fulltext针对英文生效->sphinx (coreseek) 技术处理中文

4,使用方法是 match(字段名..) against(‘关键字’)

5,全文索引一个 叫 停止词,  因为在一个文本中,创建索引是一个无穷大的数,

6,因此,对一些常用词和字符,就不会创建,这些词,称为停止词.

7,任何过于短的词都会被忽略。 全文搜索所能找到的词的默认最小长度为 4个字符。

8,MATCH()列列表必须同该表中一些 FULLTEXT索引定义中的列列表完全符合,除非MATCH()在IN BOOLEAN MODE(布尔全文搜索)。

9,对AGAINST() 的参数必须是一个常数字符串。

创建 :CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body) )engine=myisam charset utf8;INSERT INTO articles (title,body) VALUES ('MySQL Tutorial','DBMS stands for DataBase ...'), ('How To Use MySQL Well','After you went through a ...'), ('Optimizing MySQL','In this tutorial we will show ...'), ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), ('MySQL vs. YourSQL','In the following database comparison ...'), ('MySQL Security','When configured properly, MySQL ...');

如何使用全文索引:

错误用法:

select * from articles where body like '%mysql%'; [不会使用到全文索引]

证明:

explain  select * from articles where body like '%mysql%'正确的用法是:(match中的列值,跟定义fulltext时的一样)

select * from articles where match(title,body) against('database'); 【可以】

唯一索引::

①当表的某列被指定为unique约束时,这列就是一个唯一索引

create table ddd(id int primary key auto_increment , name varchar(32) unique);

这时, name 列就是一个唯一索引.②在创建表后,再去创建唯一索引

create table eee(id int primary key auto_increment, name varchar(32));

create unique index 索引名  on 表名 (列表..);unique字段可以为NULL,并可以有多NULL, 但是如果是具体内容(例如 ''),则不能重复.

主键字段,不能为NULL,也不能重复.

索引查询,删除,修改::desc 表名 【该方法的缺点是: 不能够显示索引名.】

show index(es) from 表名

show keys from 表名alter table 表名 drop index 索引名;

先删除,再重新创建.

索引使用的注意事项::

1.占用磁盘空间

2.对DML操作有影响,变慢(例如增加,删除,修改),因数据库操作中select占绝大部分,所以能有索引的地方最好还是用索引

例如:alter table dept add index my_ind (dname,loc); //  dname 左边的列,loc就是右边的列3,对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。

explain select * from dept where loc='aaa'\G

就不会使用到索引

4,对于使用like的查询,查询如果是  '%aaa' 不会使用到索引,'aaa%' 会使用到索引。

比如: explain select * from dept where dname like '%aaa'\G

不能使用索引,即,在like查询时,关键的 ‘关键字’ , 最前面,不能使用 % 或者 _这样的字符.,

如果一定要前面有变化的值,则考虑使用 全文索引->sphinx.

5.如果条件中有or,即使其中有条件带索引也不会使用。

换言之,就是要求使用的所有字段,都必须建立索引, 我们建议大家尽量避免使用or 关键字select * from dept where dname=’xxx’ or loc=’xx’ or deptno=456.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。

否则不使用索引。(添加时,字符串必须''), 也就是,如果列是字符串类型,就一定要用 '' 把他包括起来.7.如果mysql估计使用全表扫描要比使用索引快,则不使用索引。(有但少见,例如表中就一条数据)

适合创建索引的列应满足::

a: 肯定在where条经常使用

b: 该字段的内容不是唯一的几个值(sex:男或女  0或1)

c: 字段内容不是频繁变化.

查看索引使用的情况::

show status like 'Handler_read%';

结果中

handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。

handler_read_rnd_next:这个值越高,说明查询低效。

0

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

mysql索引小结_[数据库]mysql索引小结_星空网相关推荐

  1. mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...

    mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...

  2. mysql数据库要定期清除吗_数据库mysql定时清除数据

    数据库mysql定时清除数据 数据库mysql定时清除数据 https://www.jiangweishan.com/article/2384238490809808.html 作者:andy0012 ...

  3. rds mysql 视图 索引_数据库 视图 索引

    SQL2K数据库开发二十二之索引操作在视图上创建索引 1.在企业管理器中,右击要创建索引的视图,在弹出的菜单中选择"设计视图"命令进入视图设计器. 2.在视图设计器中显示了视图所包 ...

  4. mysql建立学号与课程编号的索引_数据库mysql 四约束 三范式 六索引

    mysql 四约束 三范式 六索引 1.MySQL 约束 1.约束的作用 分类 表列的primary key主键,unique唯一键,not null非空等修饰符常常被称作约束(constraint) ...

  5. mysql explain详解_数据库mysql(1)——B+TREE索引原理

    一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...

  6. mysql索引方式_MySQL数据库的索引方式

    MySQL目前主要支持索引方法:B-Tree,Hash,R-Tree B-Tree B-Tree是最常见的索引类型,所有的列都是排序过的,每个叶节点跟节点距离相等.因此,B-Tree适合查找范围的数据 ...

  7. mysql concat 索引_mysql-查看数据库、索引、表大小

    2020/09/03 mysql查看当前所有的数据库和索引大小 select table_schema, concat(truncate(sum(data_length)/1024/1024,2),' ...

  8. mysql的索引缺点_Sqlite数据库中索引的使用、索引的优缺点

    pptv网络电视2017V4.0.2.0035 官方最新版 类型:网络电视大小:31.6M语言:中文 评分:9.2 标签: 立即下载 要使用索引对数据库的数据操作进行优化,那必须明确几个问题: 1.什 ...

  9. mysql数据库基本语法_[数据库]MySQL 基本语法

    [数据库]MySQL 基本语法 0 2018-05-31 05:00:07 1.说明: 创建默认数据库 create database 库名; 2.说明: 创建指定字符编码的数据库 create da ...

  10. mysql where 条件取反_数据库MySQL之where条件查询

    数据库MySQL之where条件查询 1. where条件查询的介绍 使用where条件查询可以对表中的数据进行筛选,条件成立的记录会出现在结果集中. where语句支持的运算符: 比较运算符 逻辑运 ...

最新文章

  1. 【linux驱动】嵌入式 Linux 对内存的直接读写(devmem)
  2. 关于/etc/fstab
  3. 使用nginx源代码编译安装lnmp
  4. 应用服务器与数据库之间是长连接,要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?...
  5. 启动数据库报错(1)ORA-01157,ORA-01110
  6. C++11系列学习之五-------decltype
  7. python .py文件变为.so文件进行加密
  8. 几个重要库函数的实现
  9. DateUtils - 一些常用的日期操作方法.
  10. Keras:基于Python的深度学习库
  11. 【微信小程序开发】第1篇:开发工具安装及程序配置
  12. Java连接redis集群报错,connection refused 和Could not get a resource from the pool
  13. “用户体验不是把每个环节做到极致,而是在关键环节打动用户“这句话对吗?...
  14. kata containers调研
  15. 本科毕设-基于C8051单片机的身份识别系统设计
  16. Android官方文档—APP组件(Services)(Bound Services)
  17. 病例演讲比赛PPT模板
  18. 自学C++之自定义数据类型与自定义类之数组使用4例
  19. zipkin链路追踪详解
  20. 等离子体化学反应类型总结

热门文章

  1. Eclipse SQL Explorer
  2. 14岁天才小子,世界最年轻的CEO
  3. 携程Apollo 启动失败遇到的坑
  4. 字节码指令之加载与存储指令
  5. jsp三大指令(总结)
  6. 生产者-消费者模型之集合ArrayBlockingQueue源码解读
  7. SharedCache-共享缓存概况和初步运用实例(1)
  8. 在Linux环境下select函数的初体验
  9. 用python来部署远程程序
  10. linux驱动系列之挂载(转)