mysql in语句 索引,MySQL 中索引相关 SQL 语句
索引是用来加快从数据库中查询数据的速度的。
需要注意的是索引的使用会增加插入和更新的时间,因为在插入数据的同时也会更新索引。所以在创建索引时确保只在那些频繁作为查询条件的列中增加。
创建索引
创建索引时有几个需要注意的点:
不要在频繁写,而读取频率较低的表上使用索引,和之前说的那样,索引提高了读速度,而损耗了写速度
不要在 low cardinality 的列上使用索引,Cardinality 直接翻译是基数,可以理解成为这一列取值的散列程度,如果一个列包含的值只有少数几个,那么索引的效果也无法达到
不要在固定大小的表上使用索引,小数量集的表增加索引并不会带来多大的性能提升,所以尤其需要注意的是那些可能随着时间数据量增长很快的表,比如 users 表
在建表时
CREATE INDEX idx_name ON table_name(column1, column2);
ALTER TABLE `table_name` ADD INDEX idx_name (`column1`);
创建唯一索引
ALTER TABLE `table_name` ADD UNIQUE uni_name (`column1`)
显示查看索引
查看表索引
SHOW INDEX FROM table_name;
在查询的结果中可以看到索引的名字,列名,散列程度(Cardinality),索引类型(BTREE) 等等。
查询 Schema 中所有的索引
SELECT DISTINCT
TABLE_NAME,
INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';
删除索引
DROP INDEX idx_name ON table_name;
ALTER TABLE table_name DROP INDEX idx_name;
Single index vs Composite index
组合索引和单一索引一样,不过组合索引是需要组合多列。
假设有用户表 users
ID | first_name | last_name | class | position |
--------------------------------------------------------
1 | Teemo | Shroomer | Specialist | Top |
2 | Cecil | Heimerdinger | Specialist | Mid |
3 | Annie | Hastur | Mage | Mid |
4 | Fiora | Laurent | Slayer | Top |
5 | Garen | Crownguard | Fighter | Top |
然后在 class 和 position 列上创建组合索引
CREATE INDEX class_pos_index ON users (class, position);
然后数据库会创建一个组合索引的排序,类似:
class-position Primary Key
--------------------------------
AssassinMid -> 10
ControllerSupport -> 16
ControllerSupport -> 18
ControllerSupport -> 8
FigherTop -> 7
FigherTop -> 9
FighterJungle -> 13
FighterJungle -> 21
FighterJungle -> 23
假设需要查询班级中的 Top,那么会提升速度:
SELECT * FROM users
WHERE
class = 'Specialist'
AND
position = 'Top';
因为按照了 class-position 来排序,所以查询速度得到了提升。数据库能够在 O(log_2(n)) 时间内查找到 Specialist-Top 而不需要读取全表。
需要注意的是即使查询条件只有 class 字段,组合索引依然能够提升速度,因为class 在组合索引的第一个位置。
但是单纯的查询 position
SELECT * FROM users WHERE position = 'Top';
则享受不到组合索引带来的好处。所以组合索引的列顺序非常关键。
创建组合索引的一些注意点:
如果特定列固定的出现在查询条件中,那么对这些列创建组合索引比较好
如果要创建 field1 上的索引,也要创建 (field1, field2) 上的索引,那么只创建一个组合索引 (field1, field2) 已经足够
和 Single indexes 一样,组合索引的 Cardinality 一样重要。显然当两个 field 有高的 Cardinality,组合索引的 Cardinality 也会很高。但是某一些情况下低 Cardinality 的列也会有高的 Cardinality 组合索引
reference
mysql in语句 索引,MySQL 中索引相关 SQL 语句相关推荐
- ef执行原生sql语句_EF Core中执行原生SQL语句
一.课程介绍之所以今天录制这个系列文章的主要原因是,想在快速帮助到大家上手在ASP.NET Core WebAPI中结合EF Core来操作我们的数据库.EF Core的基础文章和基础课程实在是太多了 ...
- mysql导出不带注释的sql语句_MySQL mysqlbinlog解析出的SQL语句被注释是怎么回事
MySQL mysqlbinlog解析出的SQL语句被注释是怎么回事 一网友反馈使用mysqlbinlog解析出的二进制日志中的内容中,有些SQL语句有#注释的情况,这个是怎么回事呢?我们通过实验来了 ...
- mysql 如何优化sql语句,如何优化SQL?MySQL中超实用的SQL语句送给大家
如何优化SQL?MySQL中超实用的SQL语句送给大家 如何优化SQL?MySQL中超实用的SQL语句送给大家 在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据 ...
- 如何找出MySQL数据库中的低效SQL语句
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改. MySQL数据库有几个配置选项可以帮助我 ...
- MYSQL中常用的SQL语句(增删改查)
MYSQL中常用的SQL语句 一.增删改查 1.新增 指定字段插入: INSERT INTO <表名> (<字段1>, <字段2>, <字段3>) VA ...
- mysql批量用trim限定_mybatis中批量更新sql语句,trim、foreach标签,varchar定义理解
准备工作 现在有一张表为:student,相关字段如下: mapper层方法 int batchUpdateStudent(List studentList); xml语句 update studen ...
- MySQL过滤相同binlog_通过Linux命令过滤出binlog中完整的SQL语句
DB:MySQL 5.6.16 CentOS:CentOS release 6.3 (Final) 当insert语句通过空格跨行输入的时候,如何提取完整的insert语句! 创建一个空表: mysq ...
- thinkphp mysql 预处理_thinkPHP框架中执行原生SQL语句的方法
本文实例讲述了thinkPHP框架中执行原生SQL语句的方法.分享给大家供大家参考,具体如下: 怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $ ...
- 数据存取演变史、数据库软件应用史、数据库的本质、分类、 MySQL数据库、系统服务制作、基本的SQL语句
数据存取演变史 1.文本文件 文本文件有两个主要的缺点:第一个就是不能保证多用户存取的文件路径一致:第二个就是不能保证多用户存取的数据格式一致 2.软件开发目录规范 软件开发目录规范规定了数据文件的大 ...
- mysql:通过JDBC接口执行创建触发器的SQL语句
delimiter 以下是从mysql官方文档<23.3.1 Trigger Syntax and Examples>抄来的一段创建触发器的SQL脚本, delimiter // CREA ...
最新文章
- Debug常用指令和DOSBox使用步骤
- php的htaccess,PHP .htaccess文件详细介绍
- 做俯卧撑的10个技巧
- c++局部对象是什么_小白学Web前端难点是什么 JS进阶知识点有哪些
- Juddi介绍及安装
- 边工作边刷题:70天一遍leetcode: day 11-3
- java云端部署_Jelastic Java云端平台
- 漂亮、免费和响应式HTML5网站模板 - 转
- 主打轻薄长续航搭载骁龙730 联想Z6发布 1899元起!
- TensorBoard:嵌入可视化
- Android Handler机制分析
- 数据类型即其相互转换
- 盛情难却:北京,QECon来了
- 空间应用统计分析(回归分析)
- 详解DataStore,SharedPreferences终结者
- Silicon Labs CP210x USB to UART Bridge_6.6.6.14_4-8-2013_6.1_x64,驱动程序64位环境,ESP32
- OVER(PARTITION BY)函数介绍
- 【渝粤教育】电大中专常见病药物治疗 (2)_1作业 题库
- PyTorch DDP
- Databricks Secrets(机密)