B-Tree能够加快访问速度,因为按条件查询数据时,如果满足索引查询条件,存储引擎不需要进行全表扫描,而是从索引的根节点开始进行搜索。根节点中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。...(4)B-Tree对索引列是顺序组织存储的,所有很适合查找范围数据。 (5)索引树中的节点,所以除了按值查找以外,索引还可以用于查询中的order by操作(按顺序查找)。...(4)ref:出现该连接类型的条件是: 查找条件列使用了索引而且不为主键和unique。其实,意思就是虽然使用了索引,但该索引列的值并不唯一,有重复。...rows:估计需要扫描的行数 Extra:显示以上信息之外的其他信息 (1)Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。
如果某个数据列包含许多重复的内容,为它建立索引效果就很差,这个性质称为索引的选择性:不重复的索引值和数据表中的记录总数的比值。索引的选择性越高则查询效率越高。...按字段个数划分 按字段个数可以把索引分为单一索引和联合索引。 单一索引 索引字段只有一列时为单一索引,上述所有索引都是单一索引。 联合索引 将多个字段组合在一起创建的索引叫联合索引。...这是由 MySQL 查询优化器的执行顺序决定的,在执行一条查询 sql 时,针对索引的选择大致有如下步骤: MySQL 优化器根据搜索条件,找出所有可能使用的索引 计算全表扫描的代价 计算使用不同索引执行查询的代价...对比各种执行方案的代价,找出成本最低的那一个 因此,虽然有多个单列索引,但 MySQL 只能用到其中的那个系统认为似乎是最有效率的,其他的就会失效。...不推荐使用或索引失效情况 数据量很小的表 有大量重复数据的字段 频繁更新的字段 如果对索引字段使用了函数或者表达式计算,索引失效 innodb OR 条件没有对所有条件创建索引,索引失效 大于小于条件
delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。 delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。...)的数据,而右表(table_b)只有满足ON的条件才会被查询出,不满足左表的数据项用NULL填充。...)的数据,而左表(table_a)只有满足ON的条件才会被查询出,不满足右表的数据项用NULL填充。...可重复读(Repeatable reads),保证同一个事务中多次读取的数据是一致的,这是 MySQL InnoDB 引擎的默认隔离级别,但是和一些其他数据库实现不同的是,可以简单认为 MySQL 在可重复读级别不会出现幻象读...所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
FROM 表名; 检索某表中多个列: SELECT 列名,列名,列名 FROM 表名; 检索某表中所有列:(尽量不用) SELECT * FROM 表名; 只检索某表中某列里不重复的项: SELECT...DISTINCT 列名 (如果有两列或以上,需要这些列组合起来是不重复的) FROM 表名; 检索指定行数: SELECT 列名 FROM 表名 LIMIT 5 OFFSET n; (mySQL...*可以换成指定列如:cust_email。计算所得行数不包括该列值为null的行。 DISTINCT 列名,求不重复的列。...列名后接 DESC 按该列内容倒序排列,ASC 正序(默认)。 ORDER BY 命令放在查询、分组等语句的最后。...插入部分行时,把要插入的列填入 Customers 括号内,与VALUES内容一一对应,没有提到的列默认NULL或其他默认值。
应用场景: 适用于经常需要进行等值查询的场景,或者当表已经有一个聚簇索引时,需要为其他列创建索引。 实际使用中的考虑 选择合适的索引类型:根据具体的查询需求和数据访问模式选择合适的索引类型。...通常,主键会自动创建一个聚簇索引,而其他索引默认为非聚簇索引。 查询性能分析:使用MySQL的EXPLAIN命令来查看查询执行计划,确定是否使用了索引,以及使用了哪些索引。...读取(Read): 聚簇索引:由于数据按索引顺序存储,范围查询和排序操作通常更快,因为数据已经按顺序排列。 非聚簇索引:读取数据可能需要额外的查找步骤,因为索引项只包含指向数据行的指针。...读取:由于数据按索引顺序存储,范围查询和排序操作非常高效。 更新:更新操作可能涉及数据的移动,特别是当更新改变了索引列的值时。 删除:删除操作可能需要重新组织数据以保持索引顺序。...更新:更新操作通常只需更新索引项中的指针或值,而不需要移动数据。但是,如果更新改变了索引列的值,则需要更新索引结构。 删除:删除操作只需从索引结构中删除相应的索引项。
优点 (1)索引项通常比记录要小,使得MySQL访问更少的数据 (2)索引都按值排序存储,相对于随机访问记录,需要更少的I/O (3)大多数据引擎能更好的缓存索引。...情况七:查询条件中含有函数或表达式 如果查询条件中含有函数或表达式,则MySQL不会为这列使用索引(虽然某些在数学意义上可以使用) ?...然后判断其他条件。 MySQL5.6前,只能从ID3开始个个回表,到主键索引上找数据行,再对比字段值。...索引会加重插入、删除和修改记录时的负担,增加写操作的成本 太多索引会增加查询优化器的分析选择时间 MySQL在运行时也要消耗资源维护索引 索引并非越多越好,如下情况不推荐建索引 对于那些查询中很少涉及的列...从图12可以看到employees表只有一个索引,那么如果我们想按名字搜索人,就只能全表扫描 ? 如果频繁按名字搜索员工,显然效率很低,考虑建索引。
FROM 表名; 检索某表中多个列: SELECT 列名,列名,列名 FROM 表名; 检索某表中所有列:(尽量不用) SELECT * FROM 表名; 只检索某表中某列里不重复的项: SELECT...DISTINCT 列名 (如果有两列或以上,需要这些列组合起来是不重复的) FROM 表名; 检索指定行数: SELECT 列名 FROM 表名 LIMIT 5 OFFSET n; (MySQL中,选第...*可以换成指定列如:cust_email。计算所得行数不包括该列值为null的行。 DISTINCT 列名,求不重复的列。...列名后接 DESC 按该列内容倒序排列,ASC 正序(默认)。 ORDER BY 命令放在查询、分组等语句的最后。...插入部分行时,把要插入的列填入 Customers 括号内,与VALUES内容一一对应,没有提到的列默认NULL或其他默认值。
,我并没有设置root账户的密码,直接按回车即可 -u和root之间可以有空格可以没有 DDL【数据定义语句】 查看mysql所有库 注意mysql语句要用分号结尾 创建库 或者“如果这个库不存在的话,...更合理 查看一下表结构: 删除列 凡是涉及到删除的操作,都要慎重 如果表中只剩下一列,不能删除列了,只能删除整张表 删除表 修改表名 数据库备份 https://blog.musnow.top/posts...注意去重只是去掉所有字段都重复的数据,所以结果中,就算有一个字段存在重复的数据,但是其他字段不重复,该数据也不会被去掉 条件查询(where)【重要】 基本用法就是在表名后加where,后面是查询条件...select要查询的字段中: 使用where时设置条件的字段,可以与select查询要获取的结果集字段无关,而是可以根据原有表中任意字段进行筛选 结果排序(order by) 按单字段升序【默认】/ 降序...,说明排序只是对于查询后的结果表进行排序,而不同于where(在查询时按条件筛选) where + order by 查询语文成绩大于70分的学生的id、姓名、数学成绩 并将查询结果按照语文成绩,降序排列
为了解决这个问题,InnoDB引入B+树 最低层的叶子节点,存放数据 其他上层节点-非叶子节点,存放目录项,作为索引 非叶子节点分为不同层次,通过分层降低每层的搜索量 每层节点按索引键大小排序,构成双向链表...联合索引只能匹配左边的列 虽然对name和score建了联合索引,但仅按score列查询无法走索引 因为在联合索引情况下,数据按照索引第一列排序,第一列数据相同时才会按第二列排序。...若想使用联合索引中尽可能多的列,查询条件中的各个列必须是联合索引中从最左边开始连续的列。若仅按第二列搜索,肯定无法走索引。...条件中列的顺序 即便列有索引,甚至有多个可能的索引方案,MySQL也可能根本不走索引 因为MySQL是根据成本判断的。...全表扫描100147条记录的成本是10103,小于其他方案。 把SQL中的create_time条件从05:00改为06:00,再次分析OPTIMIZER_TRACE。
为了解决这个问题,InnoDB引入B+树 最低层的叶子节点,存放数据 其他上层节点-非叶子节点,存放目录项,作为索引 非叶子节点分为不同层次,通过分层降低每层的搜索量 每层节点按索引键大小排序,构成双向链表...联合索引只能匹配左边的列 虽然对name和score建了联合索引,但仅按score列查询无法走索引 因为在联合索引情况下,数据按照索引第一列排序,第一列数据相同时才会按第二列排序。...若想使用联合索引中尽可能多的列,查询条件中的各个列必须是联合索引中从最左边开始连续的列。若仅按第二列搜索,肯定无法走索引。...WHERE条件中列的顺序 即便列有索引,甚至有多个可能的索引方案,MySQL也可能根本不走索引 因为MySQL是根据成本判断的。...全表扫描100147条记录的成本是10103,小于其他方案。 把SQL中的create_time条件从05:00改为06:00,再次分析OPTIMIZER_TRACE。
索引 其实数据库中的数据是按页存放的 其实索引也是按页存放的 所以本质上索引也占硬盘空间(以最小的消耗,换取最大的利益) 索引是一种有效组合数据的方式!...主键:加快检索数据/唯一标识 常用索引类型: 01.普通索引:允许在定义为索引的列中 出现 重复值和空值! ...允许空值和重复值!适合在一个内容比较多的列!text! ...06.空间索引:对空间数据类型的列建立的索引 ■按照下列标准选择建立索引的列 频繁搜索的列 经常用作查询选择的列 经常排序、分组的列 ,经常用作连接的列(主键/外键) ■请不要使用下面的列创建索引 仅包含几个不同值的列...03.where字句中有多个条件表达式的时候,包含索引的列要放在其他表达式之前! 04.在order by的字句中避免使用表达式! (C) 房上的猫 。 保留所有权利。
索引 其实数据库中的数据是按页存放的 其实索引也是按页存放的 所以本质上索引也占硬盘空间(以最小的消耗,换取最大的利益) 索引是一种有效组合数据的方式!...主键:加快检索数据/唯一标识 常用索引类型: 01.普通索引:允许在定义为索引的列中 出现 重复值和空值! ...允许空值和重复值!适合在一个内容比较多的列!text! ...06.空间索引:对空间数据类型的列建立的索引 ■按照下列标准选择建立索引的列 频繁搜索的列 经常用作查询选择的列 经常排序、分组的列 ,经常用作连接的列(主键/外键) ■请不要使用下面的列创建索引 仅包含几个不同值的列...03.where字句中有多个条件表达式的时候,包含索引的列要放在其他表达式之前! 04.在order by的字句中避免使用表达式!
,存储空间小,可以节省存储空间; char按声明大小存储,不足补空格; 其次对于查询来说,在一个相对较小的字段内搜索,效率更高; 五、技术延伸,char与varchar2的区别?...版本以及查询成本都有关; 如果mysql优化器发现,走索引比不走索引成本还要高,就会放弃索引,这些条件 !...delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。...truncate table删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。...十二、UNION操作符 UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。...所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。...如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。 如果从表中删除了某列,则索引会受到影响。...对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。...、插入、删除时间,从实际上分析一笔收款如果按收费序号索引就已 经将记录减少到只有几条,如果再按后面的几个字段索引查询将对性能不产生太大的影响。
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。...在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的基础。”数据行级锁定“的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。...如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。...在EXPLAIN命令的输出结果里,第1列是从数据库读取的数据表的名字,它们按被读取的先后顺序排列。type列指定了本数据表与其它数据表之间的关联关系(JOIN)。...possible_keys数据列给出了MySQL在搜索数据记录时可选用的各个索引。key数据列是MySQL实际选用的索引,这个索引按字节计算的长度在key_len数据列里给出。
唯一索引:索引所对应的列值里是不能有重复值的,允许有 NULL 值。像刚刚提到的主键是不允许有 NULL 值的。...,将多个单列索引改为复合索引,减少维护量 尽量挑选择度高,也就是重复率低的列作为索引,像性别这种列就不适合了,会在 B+ 树里做多层次多范围的搜索,还不如全表扫描呢 查找时,不对索引列做函数计算,否则不能使用到索引...rows: 估计要检查的行数 filtered: 按表条件过滤的行百分比 Extra: 附加信息 其中,有个 type 字段,它的含义大概如下: eq_ref: 使用到了 UNIQUE 或 PRIMARY...B 树 在 B+ 树之前还有二叉搜索树和 B 树,我们来一步一步演化,看看有什么不同,先来看二叉搜索树: [二叉搜索树] 当要进行查找时,会按小于往左搜索,大于往右搜索的规则去寻找。...当然,在插入删除时需要做对应的拆分或合并动作。 而且 B 树允许在非叶子节点也存储具体数据,这意味着在扫描搜索时也会将数据加载进来,这无疑增加了磁盘 IO。
2 去重数据 在工作中,我们经常会有需要在对原始记录清单进行整理时,剔除其中一些重复项。所谓的重复项,通常是指某些记录在各个字段中都有相同的内容(纵向称为字段,横向称为记录)。...姓名日期数量邓三2019/2/168邓三2019/5/711李四2019/1/264刘七2019/1/440王二2019/8/472张三2019/5/884王二2019/8/472李四2019/1/264 删除重复项在...1.选择数据,单击【数据】,选择【删除重复项】,会出现【删除重复项】对话框; 2.我们将“重复项”定义为所有字段的内容都完全相同的记录,那么在这里就要把所有列都勾选上。 ?...注:如果只是把某列相同的记录定义为重复项那么只需要勾选那一列字段即可。 3 快速删除数据 在Excel表格中,如果有很多无用的空行,我们的需求是想把它们全部删除。...如果通过一行一行的点击进行删除,则会比较浪费时间。如果Excel表格中除了空行外没有其他空单元格时,我们可以利用“筛选”功能快速删除数据。
修改表结构 DML 操作表中的数据 插入记录 蠕虫复制 什么是蠕虫复制 更新表记录 删除表记录 DQL 查询表中的数据 简单查询 指定列的别名进行查询 清除重复值 查询结果参与运算 条件查询 运算符...;不行的话,检查是否按上面一步所说,之前的密码是否有修改,照上面的操作;如果依然不行,将 mysql 安装目录下的 data 文件夹备份,然后删除,在安装完成后,将安装生成的 data 文件夹删除,备份的...条件表达式] 不带条件删除数据 DELETE FROM 表名; 带条件删除数据 带条件删除数据 使用 truncate 删除表中所有记录 TRUNCATE TABLE 表名; truncate 和 delete...select distinct address from student; 查询结果参与运算 某列数据和固定值运算: SELECT 列名1 + 固定值 FROM 表名; 某列数据和其他列数据参与运算:...1NF 概念: 数据库表的每一列都是不可分割的原子数据项,不能是集合、数组等非原子数据项。即表中的某个列有多个值时,必须拆分为不同的列。简而言之,第一范式每一列不可再拆分,称为原子性。
#重启mysql /etc/init.d/mysql restart 卸载管理 删除mysql的数据文件 sudo rm /var/lib/mysql/ -R 删除mqsql的配置文件 sudo rm...连接 逻辑删除 对于重要数据,并不希望物理删除,一旦删除,数据无法找回 一般对于重要数据,会设置一个isDelete的列,类型为bit,表示逻辑删除 大于大量增长的非重要数据,可以进行物理删除 数据的重要性....; #主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准 #修改 update 表名 set 列1=值1,... where 条件 #删除 delete from...表名 where 条件 #逻辑删除,本质就是修改操作update alter table students add isdelete bit default 0; #如果需要删除则 update students...根据性别和出生的年份去重复 -- 条件,筛选id>900的男生 select * from x_msg where id > 900 and sex = '男'; ?
领取专属 10元无门槛券
手把手带您无忧上云