mysql gis index 索引原理_MySQL之索引原理

一.介绍

为什么有索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构.

作用:

1.        快速查询数据

2.        保证数据的唯一性

3.        实现表与表之间的参照完整性

4.        在使用order by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。

优点:

1.        大大加快数据检索速度

2.        创建唯一索引,保证数据库表中每行数据的唯一性

3.        加速表之间的连接

4.        减少查询中分组和排序的时间

索引在MySQL中也叫做“键”或者"key"(primary key,unique key,还有一个index key),是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要,减少io次数,加速查询。(其中primary key和unique key,除了有加速查询的效果之外,还有约束的效果,primary key 不为空且唯一,unique key 唯一,而index key只有加速查询的效果,没有约束效果)

2.索引的数据结构:

0e8e27f8d95f5e133925ed5e2d64e784.png

Mysql索引管理:

功能:

#1. 索引的功能就是加速查找#2. mysql中的primary key,unique,联合唯一也都是索引,这些索引除了加速查找以外,还有约束的功能

常用的索引:

普通索引INDEX:加速查找

唯一索引:-主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)-唯一索引UNIQUE:加速查找+约束(不能重复)

联合索引:-PRIMARY KEY(id,name):联合主键索引-UNIQUE(id,name):联合唯一索引-INDEX(id,name):联合普通索引

创建,删除缩印:

#方法一:创建表时

CREATE TABLE 表名 (

字段名1 数据类型 [完整性约束条件…],

字段名2 数据类型 [完整性约束条件…],

[UNIQUE| FULLTEXT | SPATIAL ] INDEX |KEY

[索引名] (字段名[(长度)] [ASC|DESC])

);#方法二:CREATE在已存在的表上创建索引

CREATE [UNIQUE | FULLTEXT |SPATIAL ] INDEX 索引名

ON 表名 (字段名[(长度)] [ASC|DESC]) ;#方法三:ALTER TABLE在已存在的表上创建索引

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT |SPATIAL ] INDEX

索引名 (字段名[(长度)] [ASC|DESC]) ;#删除索引:DROP INDEX 索引名 ON 表名字;

#实例:#方式一

create table t1(

id int,

name char,

age int,

sex enum('male','female'),

unique key uni_id(id),

index ix_name(name)#index没有key

);#方式二

create index ix_age on t1(age);#方式三

alter table t1 add index ix_sex(sex);#查看

mysql>show create table t1;| t1 |CREATE TABLE `t1` (

`id` int(11) DEFAULT NULL,

`name` char(1) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

`sex` enum('male','female') DEFAULT NULL,

UNIQUE KEY `uni_id` (`id`),

KEY `ix_name` (`name`),

KEY `ix_age` (`age`),

KEY `ix_sex` (`sex`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

查询优化神器(explain):

执行计划:让mysql预估执行操作(一般正确)

all< index < range < index_merge < ref_or_null < ref < eq_ref < system/const

id,email

慢:

select* from userinfo3 where name='alex'explain select* from userinfo3 where name='alex'type: ALL(全表扫描)

select* from userinfo3 limit 1;

快:

select* from userinfo3 where email='alex'type: const(走索引)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值