mysql:索引
2023-09-27 14:27:10 时间
作用
提高了查询速度,降低了增删改的速度
举例:
比如字典的内容你增加(增删改)了一段文字,那目录(索引)都会随着改变(耗时)
一般在查询频率高的列加,重复度低的列加效果更好
分类
key:普通索引,加快速度
unique key:唯一索引,加快速度,约束数据唯一
primary key:主键索引
fulltext:全文索引(中文环境下无效,要分词+索引,一般用第三方sphinx )
索引长度:建索引时,可以只索引列的前一部分,比如前10个字符,如 key email(eemail(10))
多列索引:把两列或多列的值 看成一个整体,然后建索引
冗余索引:某个列可能存在多个索引
…
例子
create table t16 (
id int,
name char(10),
email char(20),
primary key id
key name(name),
unique key email(email)
)
索引操作
增:
alter table table_name add index index_name
ALTER TABLE testalter_tbl ADD INDEX (c);
删:
alter table table_name drop index index_name
// 或
drop index index_name on table_name
查:
show index form table_name
实操
建立索引的缺点
占用磁盘空间,并且会对dml(插入,删除,修改,)操作速度产生影响,变慢;
建立索引列的原则
不是频繁进行修改;该字段不是频繁的几个(比如sex列不适合);肯定在where条件中进行使用;
不能使用索引的情况
- 使用查询语句LIKE “%XXXX”,以%开头是不能使用索引的,而如果是LIKE "XXX%"的就会使用索引;
- 使用or查询,如果or两端中,有一个字段是没有索引的,那么就不会使用索引;
- 对于联合索引,没有符合“最左原则”;
- 对于索引列上面进行了数学运算;
- 对于索引列上面进行了函数运算;
- 如果列类型是字符串,那一定要在条件中将数据使用引号进行使用,否则不使用索引;
- 如果mysql估计使用全表扫描要比使用索引快,则不会使用索引;
不推荐建立索引情况:
- 数据的唯一性差;比如性别列,因为数据就只有两种情况,那么建议的二叉树级别少,多是平级,这样无异于进行全表扫描;
- 频繁更新的字段不要建立索引;比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。
- 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引
- where 子句里对索引列使用不等于(<>),使用索引效果一般
切记:只有在where语句出现,mysql才会去使用索引
相关文章
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
- MySQL: Client Techniques
- 【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
- MySQL not exists 真的不走索引么
- mysql索引有哪些类型?
- MySQL 索引性能分析概要
- MySQL数据库介绍——包含索引、视图、事务、引擎
- MySQL索引原理以及查询优化
- mysql中联合索引的细节问题
- CentOS下MySQL主从复制,读写分离
- 基于Java(mybatis)+MySQL实现的(Web)时间日程管理系统【100010638】
- 基于Java(SSM框架)+MySQL开发的销售管理系统【100010073】
- MySQL/MariaDB表表达式(3):视图
- mysql 错误:Table is marked as crashed and should be repaired 解决办法
- mysql 利用relay log 使用 start slave until 恢复方法
- 在centos服务器安装MySQL数据库详细步骤
- MySQL索引优化
- 【转】Linux学习---CentOS 7编译安装MySQL 8.0
- lucene索引并搜索mysql数据库[转]
- 非常简单的oracle和mysql数据互传
- mysql聚集索引 mysql如何查看某个表的聚集索引
- (1.2)mysql 索引概念
- (0.2.1)mysql数据库环境-操作系统配置
- 查询Mysql 某个数据库中的所有表中是否包含某个字段
- Navicat快速将mysql表转为postgresql表(数据+表结构)
- CentOS7快速安装mysql