mysql的索引
1 哪些地方要用到索引
只要设计到查询操作都会用到索引,如果不用索引的话,就要进行全表遍历了。
关于查询可以参考下面的博客:
https://www.cnblogs.com/whgk/p/6149009.html
2 mysql索引的种类及其创建命令
2.1 主键索引
一种特殊的唯一索引,不允许空值,因为主键本身就不允许空值。
ALTER TABLE <table_name> ADD PRIMARY KEY (<column_name>);
2.2 唯一索引
被索引的列的值必须是互异的,即必须是唯一的。
ALTER TABLE <table_name> ADD UNIQUE(<column_name>);
2.3 普通索引
最基本的索引,没有限制。
ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>);
2.4 全文索引
对文本数据建立全文索引,目的是进行关键字搜索,然后返回包含该关键字的行。
ALTER TABLE <table_name> ADD FULLTEXT (<column_name>);
2.5 联合索引
对多列创建索引,先对第一列创建索引,然后对于第一列相同的所有的行的第二列创建索引,依次类推,也就是说,以后面的列作为查询条件时,必须要建立在前面的列的基础上,单独使用后面的列作为查询条件时联合索引是失效的。
ALTER TABLE <table_name> ADD INDEX <index_name>(<column1_name>, <column2_name>);
3 mysql的两种索引结构
3.1 B+树索引
不光适合于单记录查询,也适合于范围查询,因为所有的记录都位于底层节点,并且是按照顺序使用链表连接存放的,这样的话,只要找到了返回中的第一个记录,然后遍历就找到了满足条件的所有记录。
3.2 hash索引
只适合单记录查询,因为各条记录都是被hash分散分布的。
4 对查询条件中的列建立索引
5 建立的索引不起作用的情况
第一,复合索引,但是查询条件不满足最左原则
比如建立的索引是a,b,但是只是以b为条件,那么该复合索引就不起作用。
第二,多个or条件,其中的一个没有索引
6 建立索引的原则
第一,最左前缀原则,mysql会一直向右匹配直到遇到范围查询,也就是说,它会从左到右遍历条件去找相应的索引。
比如 a=1 and b=2 and c>3 and d =4,mysql找到c>3的时候就停止找索引了。
第二,=可以乱序,a=1 and b=2 and c=3,索引可以设计成(a,b,c)或者(a,c,b)或者(b,c,a)等,因为mysql会自己去调整位置。但是没有必要这样,直接建立同样顺序的索引就行了。
第三,选择区分度高的列作为索引。
相关文章
- 【MySQL从入门到精通】【高级篇】(十)MyISAM的索引方案&&索引的优缺点
- MySQL普通索引加锁案例分析
- MySQL的索引条件下推(index condition pushdown,ICP)
- 更新数据时,MySQL的聚簇索引是如何变化的?
- MySQL普通索引和唯一索引到底什么区别?
- 阿里百度华为如何使用MySQL给字符串加索引
- 【数据库开发】在Windows上利用C++开发MySQL的初步
- mysql性能最大优化
- mysql索引失效的情况以及left join关联字段字符集排序规则造成索引失效
- 分析MariaDB初始化脚本mysql_install_db
- 面试官:谈谈 MySQL 联合索引生效、失效的条件?
- MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql
- Mysql备份并上传到固定的服务器
- mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决
- 五分钟搞清楚MySQL事务隔离级别
- mysql中tinyint、smallint、mediumint,int 和bigint 的区别
- 为什么 MongoDB (索引)使用B-树而 Mysql 使用 B+树
- 面试官:为什么Mysql索引用B+树,而Mongodb索引用B树?
- 全网多种方法解决com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure的问题
- MySQL索引:回表、索引覆盖,最左匹配原则、索引下推
- 玩转Mysql系列 - 第23篇:mysql索引管理详解
- MySQL 第九篇:Mysql 与 ORACLE 开发差异、Mysql 优化
- MySQL 通配符学习小结
- 禁止MySQL开机自动启动的方法
- 优化MySQL前缀索引
- PHP 安装 redis、memcached、openssl、pdo_mysql等
- 【Mysql系列】什么是辅助索引?