索引是什么

索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询数据库表中数据。索引的实现通常使用B树及其变种B+树。更通俗的说,索引就相当于目录。为了方便 查找书中的内容,通过对内容建立索引形成目录。而且索引是一个文件,它是要占据物理空间的。

索引有哪些优缺点

优点

可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

缺点

时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增删改的时候,索引也要动态的维护,会降低增删改的执行效率;空间方面:索引需要占物理空间。

mysql有哪几种索引类型

存储结构:B-Tree,B+Tree,Hash索引从应用层次来分:普通索引、唯一索引、复合索引数据的物理顺序和列的逻辑顺序的关系: 聚集索引 和 非聚集索引

为什么索引结构默认为B+Tree,而不是B-Tree,Hash,二叉树,红黑树?

B-Tree

B+树非叶子节点不存储数据的,仅存储键值(索引地址),而B树节点中不仅存储键值,也会存储数据。B+树之所以这么做是因为在数据库中页的大小是固定的,innodb中页的默认大小是16KB。如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的IO次数会再次减少,数据查询的效率也会更快。 B+树索引的所有数据均存储在叶子节点,且数据是按照顺序排列的。B+树使得范围查找,排序查找,分组查找以及去重查找变得简单高效 B+树各个页之间是通过双向链表连接,叶子节点中的数据是通过单向链表连接的。我们通过双向链表和单向链表连接的方式可以找到表中所有的数据。

Hash

哈希索引不支持排序哈希索引只支持等值查询,无法提供范围查询功能哈希索引不支持部分列索引查找

二叉树

树的高度不均匀,不能自平衡,查找效率跟数据有关(树的高度),并且IO代价高。

红黑树

树的高度随着数据量增加而增加,IO代价高。

讲一讲Mysql的最左前缀原则

https://developer.aliyun.com/ask/281197

最左前缀原则:顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上。

(1)如果第一个字段是范围查询需要单独建一个索引;

(2)在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边;

当创建(a,b,c)复合索引时,想要索引生效的话,只能使用 a和ab、ac和abc三种组合!

如何创建索引

CREATE TABLE user_index2 (

id INT auto_increment PRIMARY KEY,

first_name VARCHAR (16),

last_name VARCHAR (16),

id_card VARCHAR (18),

information text,

KEY name (first_name, last_name),

FULLTEXT KEY (information),

UNIQUE KEY (id_card)

);

ALTER TABLE table_name ADD INDEX index_name (column_list);

CREATE INDEX index_name ON table_name (column_list);

创建索引需要注意什么

非空字段最大离散字段索引字段越小越好

创建索引的原则

最左前缀匹配原则 =和in可以乱序 尽量选择区分度高的列作为索引 索引列不能参与计算 尽量的扩展索引,不要新建索引 使用聚簇索引 使用短索引 尽量使用覆盖索引,避免使用select *

什么情况下不走索引

使用(!=或者<>),索引失效类型不一致,索引失效: 字符串不加单引号,造成索引失效使用函数,索引失效使用运算操作,索引失效是用OR,索引失效: 并不是所有的OR都是使索引失效,如果OR连接的是同一个字段,那么 索引不会失效,反之索引失效。以%开头的like模糊查询,索引失效使用NOT IN、 NOT EXISTS,索引失效

介绍一下事务具有的4个特性

原子性一致性隔离性持续性

为什么要分库分表

分表

单表数据量太大,会极大影响你的sql执行的性能

一般来说,就以我的经验来看,单表到几百万的时候, 性能就会相对差一些了,你就得分表了。

分库

分库就是你一个库一般我们经验而言,最多支撑到并发 2000一定要扩容了

如何对数据库进行垂直拆分或水平拆分

水平拆分

就是把一个表的数据给弄到多个多个表里去,但是每个库的表结构都一样。

垂直拆分

就是把一个有很多字段的表拆分成多个表。每个表的结构都不一样,每个库表都包含部分字段。一般来说,将较少访问频率很高的字段放一个表里面,将较多访问频率很低的字段放另一个表里面。因为你访问频率较高的字段越少越好。

如何定位及优化SQL语句的性能问题

查看语句的执行计划

大表数据查询怎么优化

优化sql语句加索引;加缓存,redis;主从复制,读写分离;垂直拆分,水平拆分

统计过慢查询吗?对慢查询都怎么优化过

首先分析语句,看看是否load了额外的数据,可能是查询了多余的行并且抛弃掉了,可能是加载了许多结果中并不需要的列,对语句进行分析以及重写。分析语句的执行计划,然后获得其使用索引的情况,之后修改语句或者修改索引,使得语句可以尽可能的命中索引。如果对语句的优化已经无法进行,可以考虑表中的数据量是否太大,如果是的话可以进行横向或者纵向的分表。

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。