索引初识一 MySql

1 mysql索引类型【主要分4类索引】

创建索引:

1.添加PRIMARY KEY(主键索引) 【主键:一种唯一性索引,必须指定为primary key 】

mysql> ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引)

mysql> ALTER TABLE `table_name` ADD UNIQUE ( `column` )

3.添加INDEX(普通索引)

mysql> ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引) 【从3.23.23版开始支持全文索引和全文检索,FULLTEXT,可以在char、varchar或text类型的列上创建】

mysql> ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引【注意:多个单列索引与单个多列索引的查询效果不同,因为:执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引】

mysql> ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, column3`)

删除索引:

DROP INDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

2 mysql索引存储格式

   存储引擎可以选择Hash或BTree索引【默认】方法,Hash索引方法只能用于=或<=>的等式比较。

  B树跟Hash跟全文搜索下期再细分。

3 如何根据sql语句确定索引类型

  a.性能优化过程中,选择在哪个列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在where子句中出现的列,在join子句中出现的列。

  b.考虑列中值的分布,索引的列的基数越大,索引的效果越好。

  c.使用短索引,如果对字符串列进行索引,应该指定一个前缀长度,可节省大量索引空间,提升查询速度。

  d.利用最左前缀, 顾名思义,就是最左优先,比如我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。

  e.不要过度索引,只保持所需的索引。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。

  在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。

  MySQL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,

  以及某些时候的like(不以通配符%或_开头的情形)。

4 案例和原理

以我公司房屋数据库为例,总共700w的数据。同样一条搜索语句SELECT id from t_basic_house where storey_name like ‘6跃7%‘;

非索引:28.525s,有索引:0.263s。

原理:非索引状态下想要搜索 “6跃7”的数据,必须整张表的每行数据,效率极低。

索引状态下索引是在storey_name 上排序的。现在,当查找storey_name 信息时,就不需要逐行搜索全表,可以利用索引进行有序查找(如二分查找法),并快速定位到匹配的值,以节省大量搜索时间。

时间: 2024-10-11 06:00:55

索引初识一 MySql的相关文章

MySQL5.5索引数在InnoDB引擎内与索引数在mysql中定义的数量是不一致问题

在查看MySQL错误日志的时候发现这样的错误,如下: 160322 21:42:59 [ERROR] Table baby/baby_order contains 12 indexes inside InnoDB, which is different from the number of indexes 11 defined in the My SQL 大概意思是说表baby_order的索引数在InnoDB引擎内与索引数在mysql中定义的数量是不一致的 为什么会出现这样的错误呢? 参考了这

mysql索引总结(1)-mysql 索引类型以及创建

文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢.还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针

02: MySQL 索引类型 、 MySQL 存储引擎

day02一.mysql索引二.MySQL存储引擎+++++++++++++++++++++++++++++++++++一.mysql索引1.1 索引介绍 : 相当于 "书的目录" 5000页1~200 目录信息拼音排序部首排序笔画排序 201~5000 正文 1.2 索引的优点与缺点?优点 加快查询的速度缺点 占用物理存储空间,减慢写的速度. 姓名 性别 班级 年龄jimjimNULL 1.3 使用普通索引index:(在表中的字段上创建索引)使用规则?查看 desc 表名: key

mysql索引初识

文章是学习了林晓斌老师在极客时间的<mysql实战45讲>后,根据自己的理解整理而成的. 什么是索引? 当我们使用汉语字典查找某个字时,我们会先通过拼音目录查到那个字所在的页码,然后直接翻到字典的那一页,找到我们要查的字,通过拼音目录查找比我们拿起字典从头一页一页翻找要快的多,数据库索引也一样,索引就像书的目录,通过索引能极大提高数据查询的效率. 索引的实现方式 在数据库中,常见的索引实现方式有哈希表.有序数组.搜索树 哈希表哈希表是通过键值对(key-value)存储数据的索引实现方式,可以

solr5.5.4 增量索引 自动同步mysql数据

前言:之前测试了solr好几个版本都没有成功,solr比较好下载的版本5.0,5.5,6.6.solr6.6结合tomcat8做自动同步mysql数据一直报错,然后果断测试5.5版本的,成功了. 环境:windows10, jdk1.8,tomcat8,solr5.5.4 实现功能:通过前端输入关键字查询,同时查询多表多字段.当数据库mysql添加或者更新数据的时候,数据自动更新到solr引擎中. 正文: 第一步:下载solr 1.solr5.5下载:http://apache.fayea.co

修改索引名称(mysql)

MySQL修改索引名称. 对于MySQL 5.7及以上版本,可以执行以下命令: ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name 对于MySQL 5.7以前的版本,可以执行下面两个命令: ALTER TABLE tbl_name DROP INDEX old_index_name ALTER TABLE tbl_name ADD INDEX new_index_name(column_name)

lucene索引并搜索mysql数据库[转]

由于对lucene比较感兴趣,本人在网上找了点资料,终于成功地用lucene对mysql数据库进行索引创建并成功搜索,先总结如下: 首先介绍一个jdbc工具类,用于得到Connection对象: [java] view plaincopy import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * JdbcUtil.java * @version 1.0 * @cre

mysql索引总结(2)-MySQL聚簇索引和非聚簇索引

聚簇索引就是对磁盘上的实际数据重新组织以按照特定的一个或者多个列的值排序的算法 特点是存储数据的顺序和索引顺序一致 一般情况下主键会默认生成聚簇索引 且一张表有且只有一个聚簇索引 聚簇索引和非聚簇索引的区别是: 聚簇索引的叶子节点就是数据节点 而非聚簇索引的叶子节点仍然是索引文件 只是这个索引文件中包含指向对应数据块的指针 MySQL中不同的数据存储引擎对聚簇索引有不同的支持 MyISAM使用的是非聚簇索引 原始数据 存储方式 按照列值和行号来组织索引的 叶子节点中保存的实际上是指向存放数据块的

数据库索引初识

数据库的操作,选择,修改,删除.对于数据量大或者有性能要求时,都需要优化我们的操作,其中一个操作就是建立索引,在数据库表的某列或者某几列上面建立索引. 例如 表information: name  age  sex  address -- 查询某个姓名为"Nommy"的信息,如果该表有几千行,则需每行遍历查找数据,直至最后一行,效率不高,没有目的,甚至姓名不是主键可能存在多行姓名为Nommy情况,那么必须要遍历每一行完成为止.,,即全表扫描 索引:索引是表的列上创建,是一种数据结构 B