当前位置:网站首页>mysql 索引
mysql 索引
2022-06-23 05:38:00 【小代码2016】
概念
索引是帮助mysql高效获取数据的数据结构
即索引的本质是数据结构
也可以理解为排好序的快速查找数据结构
满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据上实现高级查找算法。这种数据结构就是索引
平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉树),其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是B+树索引,统称索引,除了B+树,还有哈稀索引
优势和劣势
优势:可以降低IO成本和CPU的消耗
劣势:降低了更新速度,因为更新数据时还要更新索引
分类
- 普通索引
- 唯一索引
- 主键索引
- 组合索引
- 全文索引
语法
# 创建
CREATE TABLE table_name[col_name data type]
[unique|fulltext][index|key][index_name](col_name[length])[asc|desc]
1.unique|fulltext为可选参数,分别表示唯一索引、全文索引
2.index和key为同义词,两者作用相同,用来指定创建索引
3.col_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择
4.index_name指定索引的名称,为可选参数,如果不指定,默认col_name为索引值
5.length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度
6.asc或desc指定升序或降序的索引值存储
# 删除
drop index [indexName] on tableName;
# 查看
show index from tableName;
普通索引
是最基本的索引,它没有任何限制。它有以下几种创建方式:
# 1.
CREATE INDEX index_name ON table(column(length))
# 2.
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
# 3.
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER NOT NULL ,
`content` text CHARACTER NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (title(length))
)
唯一索引
与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
# 1.
CREATE UNIQUE INDEX indexName ON table(column(length))
# 2.
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
# 3.
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER NOT NULL ,
`content` text CHARACTER NULL ,
`time` int(10) NULL DEFAULT NULL ,
UNIQUE indexName (title(length))
);.
主键索引
是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引:
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) NOT NULL ,
PRIMARY KEY (`id`)
);
组合索引
指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合
ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);
全文索引
主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。
# 1.
CREATE FULLTEXT INDEX index_content ON article(content)
# 2.
ALTER TABLE article ADD FULLTEXT index_content(content)
# 2.
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER NOT NULL ,
`content` text CHARACTER NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
);
注意事项
使用索引时,有以下一些技巧和注意事项:
- 索引不会包含有null值的列
只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为null。 - 使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个char(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。 - 索引列排序
查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。 - like语句操作
一般情况下不推荐使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。 - 不要在列上进行运算
这将导致索引失效而进行全表扫描,例如
SELECT * FROM table_name WHERE YEAR(column_name)<2017;
- 不使用not in和<>操作
边栏推荐
- Synchronous switching power supply reduces EMI layout dv/dt di/dt
- js中if逻辑过多,常见优化
- 项目_过滤器Filter解决中文乱码
- Miscellaneous things
- redux Actions may not have an undefined “type“ property. Have you misspelled a constant?
- Open source ecology 𞓜 super practical open source license basic knowledge literacy post (Part 2)
- 快速认识 WebAssembly
- 问题:访问组件中数据object(定义的数据)中属性也为object对象中的属性时,报错现象
- 疫情下的传媒产业,小程序生态驱动数字化转型探索
- For non dpdk kvm1.0 machines, set init Maxrxbuffers changed from 256 to 1024 to improve packet receiving capacity
猜你喜欢

聚焦智慧城市,华为携手中科星图共同开拓数字化新蓝海

Haas506 2.0 development tutorial -hota (only supports versions above 2.2)

开源OAuth2框架 实现SSO单点登录

Functions and basic structure of CPU

Docker practice - redis cluster deployment and micro service deployment project

把CSMA/CD、Token Bus、Token Ring说清楚

Understand how learning JSX works

综合培养学生脑力思维的少儿编程

二叉树的遍历及相关知识

Badly placed ()‘s 问题
随机推荐
The softing datafeed OPC suite stores Siemens PLC data in an Oracle Database
VS2013 FFMPEG环境配置及常见错误处理
ffplay实现自定义输入流播放
Measurement principle and thickness measurement mode of spectral confocal
LeetCode笔记:Weekly Contest 298
Topic35——34. 在排序数组中查找元素的第一个和最后一个位置
How to view native IP
C# wpf 附加属性实现界面上定义装饰器
开源生态|超实用开源License基础知识扫盲帖(下)
总结的好处
Sklearn classification in sklearn_ Report & accuracy / recall /f1 value
haas506 2.0开发教程-sntp(仅支持2.2以上版本)
redux Actions may not have an undefined “type“ property. Have you misspelled a constant?
Mysql5.6 (5.7-8) is based on shardingsphere5.1.1 sharding proxy mode. Read / write separation
关于职业态度
Steam教育对国内大学生的影响力
Smart port: how to realize intelligent port supervision based on the national standard gb28181 protocol easygbs?
js 动态创建a href 循环下载文件只能下载10个或者固定数目的问题
微信小程序 - 全局监听globalData的某个属性变化,例如监听网络状态切换
phpStudy设置301重定向