mysql索引技术

1.关于索引的优化

执行一个正确的"creat index"建立索引。

首先我们举一个例子


如图  我们有一个emp表


按照以上的语句去检索对应的字段,会有一个指针,当他检索到第一条匹配的时候,在没有索引的条件下,他是不会停下来的

直到把全部数据检索一遍

如果创建了索引后,根据二分算法建立一个二叉树


如图所示,我们假设有九条记录,就可以按这种二叉查找树查找。这样的话检索速度就大大提高了。

尼玛当时学数据结构的时候不知道树原来这么重要~


但是。如果不是按照主键的查找呢?有多条记录呢?

那么树是这么写的


相同记录的就会排在一排。属于同一级次。这下指针就不会向下查找了。


结论:查找效率为log2N的效率

而且根据索引查找的原理是与地址有关的,故不能随意的复制表

并且查找的速度快了,但是插入和删除的速度要变慢。


索引现在的两种算法。二叉树算法和哈希算法



注意:

更新非常频繁的字段不适合创建索引。

字段选项太少的不适合创建索引。

例如:select * from emp where sex="男";


2.索引的创建、修改、删除、查询

索引四类(primary,unique,index,fulltext)

主键索引

1.在创建表的时候,指定某列为主键,那么这列就是一个主键索引

例如:create table aaa (id int unsigned primary key aotu_increment name varchar(32) not null default ''');

2.在创建表后,然后在指定某列或者某几列为主键索引

alter table XXX add primary key (字段名,字段名);


创建唯一索引

1.在创建表的时候,直接指定某列,或者某几列为唯一索引,当你把某个字段设置为unique的时候,

该列就自然是唯一索引。

例如:

id int unsigned primary key.

email varchar(64) unique.

2.创建表后,在指定某列为唯一索引

两个方法

(1)create unique index 索引名 on add(字段名)

(2)create table 表名 add unique index 索引名(字段)


主键索引和唯一索引的区别

1.主键索引不能为空也不能重复。

2..唯一索引可以为空多个空也可以,但是如果有值就不能重复。


创建普通索引

1.一般是创建表后,在使用指令创建索引

(1)create  index 索引名 on add(字段名)


全文索引

一句话:主要用处是快速检索文章的关键字。

在默认情况下,mysql提供的全文索引只支持英文文章额检索。

如果文章中含有中文,则需要学习spinx(coreseek)

例如:

create table articles(

 id int unsigned auto_increment not null primart key,

title varchar(200),

body text,

fulltext(title,body)

);

必须指定引擎MyISAM

这样使用:

selelct * from article where match(title,body) against('database');

这样我们就提出了一个关于全文索引的匹配度的概念

select MATCH(title,body)AGAINST('database'FROM) articles;


可以看出,全文索引是以匹配度的高低来决定是否把这条记录检索出来

全文索引对常用词是不会建立索引的,我们把这些常用词称为停止词。

介绍一款测试sql语句执行情况的命令 explain





尼玛我打开自己的mysql发现自己写的表都是这样的




这里我们总结了几个技巧:

技巧1:对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。

技巧2:对于like的查询,查询结果是'%aaa'不会使用到索引,'aaa%'会使用到索引

技巧3:如果条件中有or,索引无效

技巧4:如果mysql估计使用全表扫描要比索引快,则不使用索引。


查看索引的使用情况:

show status like "Handler_read%"

可以注意到 handler_read_key 这个值越高越好

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









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值