小贝_mysql索引学习与优化

mysql索引与优化

简要:

一、索引是什么

二、索引类型及使用语法

三、全文索引说明

一、索引是什么

1、以书的目录为例,通过查看目录,再找到对应的内容。因此,索引就是给数据加上了’目录’,便于快速找到数据

2、索引的作用:

好处: 加快了查询速度

坏处: a、降低了增删改的速度

b、增大了表的文件大小(索引文件甚至可能比数据文件还大)

案例: 设有某个表15列,存在10列上有索引,共500w行数据,如何快速导入?

答: 1、把空表的索引全部删除 2、导入数据 3、数据导入完毕后再建立索引

3、索引算法

设有N条随机记录,不用索引,平均查找N/2次,用了索引呢?

3.1、二叉树索引对应次数为log2N次

说明例子,数据1,2,3,4,5,6,7,以中间值4为分界点

4

2                                   6

1                3                5                7

查找3需要多少次?

由于3<4,因此3在二叉树的左边,由于3>2,因此在以2为根节点的右边。结果需要2次

3.2、哈希索引,理论上为1次

说明例子,数据1,2,3,4,5,6,7

hash[1]=001

hash[2]=003

hash[3]=005

hash[4]=007

hash[5]=009

hash[6]=011

hash[7]=013

查找3需要多少次?

先hash下,得到005,这样就找到了。刚好1次。

hash的不足:

a、浪费空间,因为hash的值不连续。

b、hash要求高,确保每个值的hash值不同

4、索引的使用原则

a、不过度索引

b、索引条件列(where后面最频繁的条件比较适宜索引)

c、索引散列值,过于集中的值不要索引(如: 性别)

5、如何看表结构

5.1、存储引擎为myisam

frm为表结构、MYD为数据文件、MYI为索引文件

5.2、存储引擎为innodb

frm为表结构、ibd为数据文件和索引文件

二、索引类型及使用语法

1、类型

a、普通索引(index): 仅仅是加快查询速度

b、唯一索引(unique index): 行上的值不能重复

c、主键索引(primary key): 不能重复

d、全文索引(fulltext index):

唯一索引和主键索引的关系:

主键必唯一,但是唯一索引不一定是主键;一张表上只能有一个主键,但是可以有一个或多个唯一索引

2、如何查看表中的索引

3、建立索引

3.1、对已经存在的表建立索引

语法: alter table 表名 add index/uniqueindex/fulltext index/primary key [索引名](列名) (备注:索引名可选,不指定则与列名相同)

表结构:

create table m( id int, emailvarchar(30),tel char(11), intro text)engine=myisam charset=utf8;

a、给tel列建立普通索引

(备注: 指定索引名与列名相同)

b、给email列加上唯一索引

c、给intro列加上全文索引

d、给id列加上主键索引

e、加上多列组合索引

(备注: 这个普通索引m作用在列email和tel列上)

错误点:

错误原因: 没有指定该索引应用在那个列上。

3.2、建立新表时,指定索引

create table m(id int primary keyauto_increment, email varchar(30), tel char(11), intro text, index(tel), uniqueindex(email), fulltext index(intro) )engine=myisam charset=utf8;

4、删除索引

4.1、删除普通索引/唯一索引/全文索引

4.2、删除主键索引

如果主键列本身就是自增的,则删除时会报错

这个情况,应该先修改列的自增属性。

三、全文索引

全文索引在mysql的默认情况下,对于中文意义不大

因为英文有空格,标点符号来拆成单词,进而对单词进行索引。

而对于中文,没有空格来隔开单词。mysql无法识别每个中文词。

用法: match(全文索引名) against(‘keyword’);

The quieter you become,the more you are able to hear!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 20:11:40

小贝_mysql索引学习与优化的相关文章

小贝_mysql分区理论学习

mysql分区 简要: 一.为什么需要mysql分区 二.mysql分区的类型 三.mysql分区技术对比 一.为什么需要mysql分区 1.首先,业务数据增大时,必然会影响数据操作.通常针对大数据,有如下优化方法: a.大表拆小表 b.sql语句优化 2.不足: a.sql语句优化可以通过增加索引等来调整,但是随着数据量增大时将会导致索引的维护代价增大 b.大表拆分小表可以在细分为垂直or水平分表.但是需要实现逻辑操作.即选择那张表 3.总结: 针对大数据,添加索引会导致索引文件大以及维护索引

小贝_mysql优化学习

mysql优化 简要: 1.数据库设计优化 2.sql语句优化 3.表分割 4.读写分离技术 一.数据库设计优化 1.表设计要符合三范式,当然,有时也需要适当的逆范式 2.什么是三范式 一范式: 具有原子性,不可再分割 二范式: 在满足一范式的基础上,我们考虑是否满足二范式.只要表的记录满足唯一性,也是说,同一张表,不可能出现完全相同的记录,一般说,在表中设计一个主键即可. 三范式: 在满足二范式的基础上,我们考虑是否满足三范式.只要表满足没冗余性. 二.SQL语句优化 1.sql优化的一般步骤

小贝_mysql表优化

mysql表优化 简要:        一.分析表 二.检查表 三.优化表 四.表数据导入 五.锁表操作 一.分析表 1.1.命令: ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]TABLE tbl_name [, tbl_name] ... 1.2.作用: 本语句用于分析和存储表的keyword分布.分析的结果将可以使得系统得到准确的统计信息,使得sql可以生成正确的行计划 1.3.不足: 在分析期间,会对表进行读锁操作 1.4.样例: 二.检查表 2.1.命令 CH

小贝_mysql sql语句优化过程

sql语句优化 一.SQL优化的一般步骤 (1).通过show status命令了解各种SQL的执行频率. (2).定位执行效率较低的SQL语句-(重点select) (3).通过explain分析低效率的SQL语句的执行情况 (4).确定问题并采取相应的优化措施 (1) 通过showstatus命令了解各种SQL的执行频率 MySQL客户端连接成功后,通过使用show[session|global] status 命令可以提供服务器状态信息.其中的session来表示当前的连接的统计结果,gl

小贝_mysql view视图学习

view视图 简要: 1.视图定义 2.创建视图 3.视图与表的关系 4.视图种类 一.视图定义 视图起因: 查询每个栏目最贵的商品=> selectgoods_id,goods_name,shop_price from goods order by cat_id asc,shop_price desc; 查询结果,当成一张表看 如果某个查询结果出现的非常频繁,也就是说,拿这个结果进行子查询出现的非常频繁. createtable g2 like goods;insert into g2 sel

小贝_mysql分区实例

mysql分区实验 简要: 一.按照分区类型建立分区 二.管理分区 三.分区与未分区表例子 一.建立分区以hash分区为例 (1).非线性hash分区 1.测试表t_hash结构 create table t_hash (id int unsigned, name char(1) )engine=myisam charset=utf8 partition by hash(id) partitions 5; 2.t_hash表物理文件结构 3.往t_hash表插入数据 4.查看表t_hash物理结

小贝_mysql 常见存储引擎区别

存储引擎区别 简要: 1.存储引擎 2.myisam与innodb区别 一.存储引擎 1.什么是存储引擎 通俗地讲就是存储和管理数据的方式 形象例子: 某处地方的自行车管理员:李某,张某.每天都有很多人来存取自行车.李某的管理方式是: 车主自行存放,李某也不记录对方存的是什么车.取车时则要交管理费.也不检查取的是否是对方自己的车.相反,张某,则在车主存放车时,记录存放人的特征以及对应车的信息.当人来取车时,张某还要小心核对,人与车的特征是否对应. 从上述例子可知: a.从效率的角度来看: 李某比

小贝_mysql建表以及列属性

mysql建表以及列属性 简要: 一.建表原则 二.详细的列属性说明 一.建表原则 建表: 其实就是声明列的过程,数据最终是以文件的形式放在硬盘(内存) 列: 不同的列类型占的空间不一样. 选列的原则: 够用,不浪费 二.列类型以及属性说明 列类型有: 整形.浮点型.字符型.日期/时间型 2.1.整形 tinyint/smallint/mediumint/int/bigint 2.1.1.详解tinyint 一个字节 [][][][][][][][]共8位 假设8为都为0 ==> 转化为十进制

小贝_mysql select连接查询

select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算表1查询结果,再算表2查询结果.再通过union把结果联合起来. 总结: a.左右查询结果列数一致 b.终于显示结果以第一张表的列名为主 c.左右查询结果的列类型最好也一致.不然就会进行转换. 由低到高.如表1结果A列为整形,表2结果A列为浮点型.则表1在A列的结果转换为浮点型 d.能够是不同表 e