⭐本文介绍⭐ 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。 开始本章教程前让我们先创建一张表,表名为:testalter_tbl。...MySQL 中使用 ADD 子句来向数据表中添加列,如下实例在表 testalter_tbl 中添加 i 字段,并定义数据类型: mysql> ALTER TABLE testalter_tbl ADD...在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。...Row_format: Fixed Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 25769803775 Index_length...命令还可以用来创建及删除MySQL数据表的索引,该功能我们会在接下来的章节中介绍。
小伙伴们在面试的时候,有一个特别常见的问题,那就是数据库的回表。什么是回表?为什么需要回表? 今天松哥就来和大家聊一聊这个话题。 1....索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,B+Tree 嘛! B+Tree 是什么?...那你得先明白什么是 B-Tree,来看如下一张图: 前面是 B-Tree,后面是 B+Tree,两者的区别在于: B-Tree 中,所有节点都会带有指向具体记录的指针;B+Tree 中只有叶子结点会带有指向具体记录的指针...,这一步是在 MySQL 服务器层完成的,并且不需要回表。...好啦,今天的主题是回表,现在大家明白什么是回表了吧?
什么是分库分表?...拆分策略有什么? 1....②每个表的数据都不一样。 ③所有表的并集是全量数据。 3....MyCat中间件 MyCat: MyCat是一个开源的、活跃的、分布式的数据库中间件 ,可以像使用MySQL一样来使用MyCat,对于开发人员来说根本感觉不到MyCat的存在。...它支持MySQL和MariaDB,并提供了水平分片、垂直分片、分布式事务等功能。
在数据库层面,什么是窄表?什么是宽表? 在数据库中,窄表和宽表是两种设计思想,分别指的是列数少或者列数多的表格。 窄表是指只包含少量列(如主键和几个属性)的表格。...关系型数据库中大部分的表都是窄表。 相比之下,宽表则是指具有大量列的表格。这些列可以来自不同的来源,可能包括各种聚合和汇总数据等。...宽表表解决了什么问题? 宽表可以解决一些需要同时获取多个数据属性、进行数据分析和数据挖掘的问题。相对于狭窄的表格,宽表可能会包含更多关联的信息,如不同维度、时间范围内的历史数据或聚合统计数据。...但是,需要注意的是,宽表对查询性能和储存空间也提出了一些挑战,需要根据具体情况进行优化和平衡。 最后 简单来说宽表就是通过一张表来维护所有信息,而窄表就是通过多张表来维护信息。...当然看场景更有利弊,主要的大数据就是用宽表来实现,而传统关系型数据是有窄表。
大家可能听说过“空间索引(Spatial Index)”,但它究竟是什么?它能为我们的分析工作带来怎样的革命性变化? 面对一张复杂的地图,满是各种线条与点,想要从中找到规律,无疑是大海捞针。...,对于两个包含上万条记录的数据表来说,可能需要上亿次比较。...与标准六边形网格不同,H3 绘制的是球形地球,而不是局限于较小的区域平面。 H3 使用墨卡托坐标系(圆柱坐标系)表示数据。 为什么 Uber 开发了 H3?...为什么选择六边形? 那么,为什么选择六边形作为网格结构呢?六边形相比于四边形和三角形,有几个显著的优势。...对于数量庞大的数据表,这种索引先行,然后局部精确计算的“两遍法”可以在根本上减少查询计算量。 “一个 15 字符的 H3 字符串在 BigQuery 中占用 19 字节的存储空间。
专栏持续更新中:MySQL详解 一、背景 先要从 InnoDB 的索引实现说起,InnoDB 有两大类索引: 聚集索引(clustered index) 普通索引 (secondary index...) InnoDB 聚集索引和普通索引有什么差异?...二、什么是回表查询?...通俗的讲就是,如果索引的列在 select 所需获得的列中(因为在 mysql 中索引是根据索引列的值进行排序的,所以索引节点中存在该列中的部分值)或者根据一次索引查询就能获得记录就不需要回表,如果 select...unique)列是聚集索引; (3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引; 三、可以举一个简单的例子 我有一张用于用户登录的user表: 字段名 类型 说明 id bigint
平时我们在使用INDEX的时候都是那么理所应当,而原理估计了解的人不是太多。今天来说说MYSQL 的索引的一些东西,或许你已经知道了,或许你还不知道,follow me ....自从MYSQL 5.7 后,INDEX的建立不在是从顶向下的方式,而是自下向上的方式来建立索引。...4 通过上面周而复始的操作,就产生了二级的索引 但问题是大部分数据库都有一个填充因子(有的数据库不这么叫),在MYSQL 里面默认的比率是 100, 而聚簇索引则以默认 百分之6的填充因子进行设置,也就是说一个页面有百分之...一般来说可以根据具体的数据库的大部分表的更新的度来进行 innodb_fill_factor 来进行设置。...一般从 70% -90% 不等来设计,如果表是静态表,基本上不更新则 90% 即可,如果经常更新,并且有些字段的值的变动较大,则可以考虑70%。后续中的页的在拆分和合并的操作。
连接查询中需要注意的点 什么是驱动表,什么是被驱动表,这两个概念在查询中有时容易让人搞混,有下面几种情况,大家需要了解。...当连接查询没有where条件时,左连接查询时,前面的表是驱动表,后面的表是被驱动表,右连接查询时相反,内连接查询时,哪张表的数据较少,哪张表就是驱动表 当连接查询有where条件时,带where条件的表是驱动表...,我们看下面三种图中,是不是全部符合情况一,第一张图中s1是驱动表,第二张图中s2是驱动表,第三种图中s2是驱动表 ?...查询的优化思路就是小表驱动大表,而且在大表上创建索引(也就是被动表创建索引),如果驱动表创建了索引,MySQL是不会使用的 for (row1 : 驱动表) { 索引在被驱动表中命中,不用再遍历被驱动表了...,那么MySQL一定使用的第二种算法,当我们没有创建索引或者对驱动表创建了索引,那么MySQL一定使用第三种算法 MySQL连接算法官方文档 https://dev.mysql.com/doc/refman
切记切记: 关联关系的话,比如user表(用户)id name把id设为主键与文章表article id name user_id把user_id设为索引外键,关联关系的话,是用户表的id与文章表的user_id...为什么呢? 因为用户表的id是主表的主键id。...从表的user_id是外键啊.而关联关系是主表的主键id与从表的外键id相关联的啊 主从表,从表数据依赖于主表,一般最后查询数据时把主表与从表进行关联查询。...主表可用于存储主要信息,如客户资料(客户编号,客户名称,客户公司,客户单位等),从表用来存储客户扩展信息(客户订单信息,客户地址信息,客户联系方式信息等)。...从表: 以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进行关联查询。从表与主表通过外键进行关联查询。 关系及用法概述
本篇文章围绕这个问题提出解决方案,一起来看看MySQL是如何优化的 回表 为什么会发生回表?...因为使用的索引并没有整条记录的所有信息,因此使用索引后不满足查询列表需要的列,就要回表查询聚簇索引 回表查询聚簇索引时,由于主键值是乱序的这样就会导致随机IO 什么是随机IO呢?...实际上上篇文章说过的ICP就可以减低回表次数 Covering Index 覆盖索引 回表无论如何优化都会存在一定的开销,那有没有可能避免回表呢? 要避免回表问题,那就要知道为什么会回表?...MySQL中的覆盖索引指的是使用二级索引时不需要回表,在执行计划中的附加信息显示**Using index** 将查询列表从 * 改为 age,student_name ,使用二级索引时不需要回表 总结...,这会导致每查询一条记录就需要将磁盘中的页加载到缓冲池,随机IO开销很大 优化回表有两种思路:一种是降低回表的开销,另一种是避免回表 Index Condition Push 索引条件下推(上篇文章说的
什么是广义表 广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构(即可以有子表)。...以下是广义表存储数据的一些常用形式: A = ():A 表示一个广义表,只不过表是空的。 B = (e):广义表 B 中只有一个原子 e。...前者是空表,而后者是包含一个子表的广义表,只不过这个子表是空表。 广义表的表头和表尾 当广义表不是空表时,称第一个数据(原子或子表)为"表头",剩下的数据构成的新广义表为"表尾"。...再比如,在广义表 LS = {1} 中,表头为原子 1 ,但由于广义表中无表尾元素,因此该表的表尾是一个空表,用 {} 表示。...在主函数中,调用此函数时,传入的是指针 T 的地址,而不是 T 。 这里使用的是地址传递,而不是值传递。如果在这里使用值传递,会导致广义表 T 丢失结点,复制失败。
哈希表用的是数组支持按照下标随机访问数据的特性,所以哈希表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。 ? 哈希表存储的是由键(key)和值(value)组成的数据。...为什么需要哈希表? ? 为了和哈希表进行对比,我们先将这些数据存储在数组中。 ?...其中,应用较为广泛的是开放地址法,或称为开放寻址法。这种方法是指当冲突发生时,立刻计算出一个候补地址(数组上的位置)并将数据存进去。...哈希表也叫散列表,来源于数组,它借助哈希函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性,是存储 Key-Value 映射的集合。...哈希表两个核心问题是哈希函数设计和哈希冲突解决。对于某一个 Key,哈希表可以在接近 O(1) 的时间内进行读写操作。
Adaptive Hash Index(以下简称 AHI)估计是 MySQL 的各大特性中,大家都知道名字但最说不清原理的一个特性。本期图解我们为大家解析一下 AHI 是如何构建的。...首先我们思考一下 AHI 是为了解决什么问题: 随着 MySQL 单表数据量增大,(尽管 B+ 树算法极好地控制了树的层数)索引 B+ 树的层数会逐渐增多; 随着索引树层数增多,检索某一个数据页需要沿着...假设一张表 table1,其索引是(A1, A2)两列构成的索引: 如果检索条件是(A1=1 and A2=1),那么此次检索使用了该索引的最左两列,hash info 就是(2,0,true) 如果检索条件是...因此我们只能为表中经常被查询的部分数据建立 AHI。所以关卡 3 的任务就是找出哪些数据页是经常被使用的数据页。 ?...的状态,我们简要盘点一下 AHI 的运维: innodb_adaptive_hash_index_parts。
拍卖行的商品总数量有几十万件,对应数据库商品表的几十万条记录。 如果是按照商品名称精确查询还好办,可以直接从数据库查出来,最多也就上百条记录。 如果是没有商品名称的全量查询怎么办?...拍卖行商品列表是线性的,最容易表达线性结构的自然是数组和链表。可是,无论是数组还是链表,在插入新商品的时候,都会存在性能问题。...O(logN) 总体上,跳跃表插入操作的时间复杂度是O(logN),而这种数据结构所占空间是2N,既空间复杂度是 O(N)。...O(logN) 总体上,跳跃表删除操作的时间复杂度是O(logN)。 小灰和大黄并不知道,他们的这一解决方案和若干年后Redis当中的Sorted-set不谋而合。...而Sorted-set这种有序集合,正是对于跳跃表的改进和应用。 对于关系型数据库如何维护有序的记录集合呢?使用的是B+树。有关B+树的知识,将在以后的漫画中详细介绍。 小伙伴们,感谢支持!
这篇教程是帮助你回答:什么是MySQL?以及告诉你为何 MySQL 是世界上最流行的开源数据库的原因。...在了解MySQL之前,要先了解database和SQL,若你已经了解它俩,则可以直接跳到:什么是MySQL?...数据库无处不在,那数据库到底是什么呢?根据定义,一个数据库只不过是数据化的集合。 数据之间有关联是很自然的,比如:一个商品隶属于一个商品分类同时关联很多标签。因此,我们称之为关系数据库。...在关系数据库中,产品、分类、标签等等,都使用表来表示,一个表包含列和行。就像电子表格。 一个表可能和其他表有关联,例如:一对一和一对多的关系。...现在,你了解了数据库和SQL,是时候回答下一个问题… MySQL是什么? My是 MySQL的联合创始人女儿 Monty Widenius的名字。 MySQL就是My 和 SQL 的组合。
1 Day 8 总结 Day 8 是 LeetCode 中非常经典的一道题目:两数之和。 题目描述如下: ? 大家注意审题,确定输入是什么,输出又是什么,假定又是什么。...但是,也有一些星友的代码是这样的,解并没有达到时间复杂度为 O(n),大家不妨参考并回头检查下自己写的。...不高效解1:index 时间复杂度O(n) index 复杂度为 O(n), 所以实际时间复杂度为 O(n^2),尽管表面上看只有一个 for 循环。 ?...2 Day 9 打卡题:什么是哈希表? 明天的打卡题,我们就来学习最重要的数据结构之一:散列表或哈希表,那么什么是哈希表呢?哈希表怎么做到 O(1) 时间复杂度找到某个元素的呢?...图片1:哈希表的基本用途 ? 图2:哈希表的查找规则: ? 图3:哈希表常遇到键冲突问题: ? 图 4 :解决方法: ? 星球内的星友直接学习本书的 1-6 解即可。然后把打卡题:什么是哈希表?
什么是索引? 假设我们有一张数据表 employee(员工表),该表有三个字段(列),分别是name、age 和address。...问题来了:即然不管读还是写,Hash这种类型比Tree树这种类型都要更快一些,那为什么MySQL的开发者既使用Hash类型做为索引,又使用了BTREE呢?...MySQL提供了两种补救办法: - 自动替换为新的值,可以用ONDUPLICATE KEY UPDATE xxx= VALUES(xxx) - 忽略插入是 insert ignore into INDEX...有些时候发现明明创建了索引,但是因为一些原因并没有使用索引,mysql支持强制走索引,比如: select* from table where a=1 force index(PRI,my_index)...比如千万级数据)新建索引时是一个需要特别慎重的事情,经常出现“翻车”导致“车毁人亡”的事故,为什么?
散列表(哈希表) 理想散列表(哈希表)是一个包含关键字的具有固定大小的数组,它能够以常数时间执行插入,删除和查找操作。...例如,对于前面: 0 1 2 3 4 5 6 50 18 19 13 如果再要插入元素20,则在下标为6的位置存储表头,而表的内容是13和20。...可以看到,无论是哪种开放定址法,它都要求表足够大。 再散列 我们前面也说到,散列表可以认为是具有固定大小的数组,那么如果插入新的数据时散列表已满,或者散列表所剩容量不多该怎么办?...这个时候就需要再散列,常见做法是,建立一个是原来两倍大小的散列表,将原来表中的关键字重新散列到新表中。 散列表的应用 散列表应用很广泛。例如做文件校验或数字签名。当然还有快速查询功能的实现。...常见冲突解决方案有: 拉链法 开放地址检测法 其中拉链法在实际中是很常见的一种解决方案。另外本文重点说明什么是散列表(哈希表),因此没有涉及具体的代码,后面将会通过实例来看散列表的实际应用。
MySQL文档提供了这种格式来创建FULLTEXT索引: | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,…) [index_option...(title, content) ) ENGINE=MyISAM; my_index_name是用户定义的名称而不是字段名称....>他们之间有什么区别? >系统本身和开发人员是否有任何后果?...我无法在文档中找到任何线索: 解决方法: 省略索引名称 如果添加索引/键 对于表,MySQL将在指定的列(列集)上存储其他信息以加快搜索速度....] … 但是使用全文索引表格可能是一个好主意,因为读者会被提醒索引. index和key是同义词 请注意,索引和键之间没有区别(请参阅create table): KEY is normally a synonym
自己是用电脑时,上网浏览网页,自然是想选择自己喜欢的浏览器,打开自己喜欢的网站首页。index.html就是这么被定义的,接下来,给大家讲解一下index.html为什么这么被定义?...image.png 一、index.html代表什么 代表默认网站的首页,这是可以自己设置的,假如喜欢用ie浏览器,但是不喜欢原始的做首页,那么可以把自己喜欢一打开浏览器就进入的网站,设置为ie浏览器的首页...,这就叫index.html。...分开来讲就是,index是一个网页的名称,而html是一个文件。无论是什么网站,只要把这个网站设置成index.html。等到下次一打开浏览器进入的就是自己设置的index.html。...二、index.html有什么作用 可以标记一个网页,方便下次打开时,不用寻找,直接进入了自己想要进入的网站,可以省时间,也不用花费精力。
领取专属 10元无门槛券
手把手带您无忧上云