缓存表和汇总表 用缓存表表示存储那些可以比较简单的从schema其他表获取(但是每次获取的数据比较慢)数据的表(逻辑上的沉余的数据) 用汇总表表示使用GROUP BY语句聚合数据的表(数据不是路逻辑上沉余的...该索引对如下类型的查询有效: 全值匹配(和索引中所有列进行匹配) 匹配最左前缀(只使用索引的第一列) 匹配范围值 匹配列前缀(匹配某一列的值的开头部分) 精确匹配某一列并范围匹配另外一列 只访问索引的查询...(只需要访问索引,无需访问数据行) 该索引的一些限制 如果不是按照索引的最左列开始查找,则无法使用索引 不能跳过索引中的列 如果查询中有某个列的范围查询,则右边的所有列都无法使用索引优化查找 哈希索引...在mysql中只有Memory引擎显示支持哈希索引 哈希索引的限制 只包含哈希值和行指针,而不包含字段值 不是按照索引值的顺序存储的,无法用于排序 不支持部分索引列匹配查找 只支持等值比较查询 访问哈希索引的数据非常快...优点: 可以把相关数据保存在一起 数据访问更快 使用覆盖索引扫描的查询可以直接使用页节点中的主键值 缺点: 最大限度的提高了io密集型应用的性能,如果数据全部放在内存中,则访问的顺序就不重要了
JSON 值的比较分为两个级别。第一级比较基于被比较值的 JSON 类型。如果类型不同,则比较结果仅取决于哪种类型具有更高的优先级。...如果这两个值具有相同的 JSON 类型,则使用特定于类型的规则进行第二级比较。 以下列表显示了 JSON 类型从高到低的优先级。...如果数组不相等,则它们的顺序由存在差异的第一个位置中的元素决定。该位置中值较小的数组排在前面。如果较短数组的所有值都等于较长数组中的相应值,则较短数组排在前面。...也就是说,精确值数字被转换为近似值数字。 另一方面,如果查询比较两个包含数字的 JSON 列,则无法提前知道数字是整数还是双精度数。为了在所有行中提供最一致的行为,MySQL 将近似值转换为精确值。...例如,如果名为 jdoc 的列包含 JSON 对象,该对象的成员由 id 键和非负值组成,则使用此表达式按 id 值排序: ORDER BY CAST(JSON_EXTRACT(jdoc, '$.id'
一、索引概述 介绍: 索引是帮助MySQL高效获取数据的数据结构(有序)。...可以有多个 UNIQUE 常规索引 快速定位特定数据可以有多个全文索引全文索引查找的是文本中的关键词,而不是比较索引中的值 可以有多个 FULLTEXT 在InnoDB存储引擎中,根据索引的存储形式...2.如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。 3.如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。...单列索引与联合索引 单列索引:即一个索引只包含单个列。 联合索引:即一个索引包含了多个列。 在业务场景中,如果存在多个查询条件,考虑针对于查询字段建立索引时,建议建立联合索引,而非单列索引。...7.如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NU儿L值时,它可以更好地确定哪个索引最有效地用于查询。
DML命令用于管理数据库中存在的数据。 SELECT:从数据库中选择特定数据 INSERT:将新记录插入表中 UPDATE:更新现有记录 DELETE:从表中删除现有记录 15....如果在插入记录时未提供任何值,则DEFAULT约束用于在列中包括默认值。 51.什么是标准化? 规范化是表设计的过程,以最大程度地减少数据冗余。 53.什么是非正规化?...存储过程是已创建并存储在数据库中以执行特定任务的SQL语句的集合。 该存储过程接受输入参数并对其进行处理,并返回单个值, 例如数字或文本值或结果集(行集)。 55.什么是扳机?...如果未与交叉联接一起使用WHERE子句,则交叉联接将产生一个结果集 该结果集是第一个表中的行数乘以第二个表中的行数。 这种结果称为笛卡尔积。...如果假设在交叉联接中使用Where子句 则查询将像内部联接一样工作。 74.什么是整理? 归类定义为一组规则,这些规则确定如何对字符数据进行排序和比较。
where 条件表达式 1、如果不使用where语句,则表示修改整个表中的数据 2、where需要指定需更新的行,set子句指定新值 3、每次只能修改一个表中的数据 4、可以同时把一列或多列、一个变量或多个变量放在一个表达式总...如果要删除特定列的值,可使用update把该列的值都设为null,当然该列必须支持null值。...连接查询是同时查询两个或两个以上的表时使用的。当不同的表中存在相同意义的列时,可通过该字段来连接这几个表。 MySQL支持不同的连接类型:交叉连接、内连接、自连接查询。...然后使用“表别名.列名”读取列的数据。 6.3.3 外连接查询 外连接查询可以查询两个或两个以上的表。外连接查询也需要通过指定字段列来进行连接。当该字段取值相等时,可以查询出该记录。...复杂的查询可以进行问题分解,然后将创建多个视频获取数据,最后将视图联合起来得到需要的结果。 4、简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。
insert into table_name (列 1, 列 2,.....) values( 值 1, 值 2,......) delete语句 用于删除表中的行。...UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Order by 语句 ORDER BY 语句用于根据指定的列对结果集进行排序。...order by 排序列数大于当前查询的列数时就会报错; Where 语句 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 更多其他基础命令可以看 http://t.csdn.cn...这里我们用 '% 来闭合 %' ,如果存在漏洞,返回正常信息。...代码原理:利用逻辑运算符 or 的运算原理,只要其中一个条件满足为真,则为真, 而 1=1 恒等式恒为真,因此如果上面三个代码输入之后页面显示结果都为正常,则我 们可以判断此页面存在
如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较 高的处理效率;如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表...即在所有可以表示该列值的类型中,该类型使用的存储最少。 整数和浮点数 如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类 型。...对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。...查询结果中,如果需要对列进行降序排序,可以使用DESC,这个关键字只能对其前面的列 进行降序排列。例如,要对多列都进行降序排序,必须要在每一列的列名后面加DESC关键字。...在查询的时候,会看到在WHERE子句中使用条件,有的值加上了单引号,而有的值未加。 单引号用来限定字符串,如果将值与字符串类型列进行比较,则需要限定引号;而用来与数值进 行比较则不需要用引号。
● 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果; ● 如果只有INSERT和...即在所有可以表示该列值的类型中,该类型使用的存储最少。 整数和浮点数 如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类型。...对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。...换句话说,DISTINCT关键字应用于所有列而不仅是它后面的第一个指定列。例如,查询3个字段s_id,f_name,f_price,如果不同记录的这3个字段的组合值都不同,则所有记录都会被查询出来。...在查询的时候,会看到在WHERE子句中使用条件,有的值加上了单引号,而有的值未加。 单引号用来限定字符串,如果将值与字符串类型列进行比较,则需要限定引号;而用来与数值进 行比较则不需要用引号。
值(value):行的具体信息, 每个值必须与该列的数据类型相同。 键(key):表中用来识别某个特定的人/物的方法, 键的值在当前列中具有唯一性。...: 若密码存在,输入密码登录,不存在则直接按回车登录,按照本文中的安装方法,默认 root 账号是无密码的。...“not null” 说明该列的值不能为空,必须要填,如果不指定该属性,默认可为空。...“primary key” 表示该列是表的主键,本列的值必须唯一,MySQL 将自动索引该列。...子句不仅仅支持 “where 列名 = 值” 这种名等于值的查询形式,对一般的比较运算的运算符都是支持的,例如 =、>、=、<、!
8、如果一个表有一列定义为 TIMESTAMP,将发生什么? 每当行被更改时,时间戳字段将获取当前时间戳。 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?...如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。...在最频繁使用的、用以缩小查询范围的字段上建立索引。 在频繁使用的、需要排序的字段上建立索引 (4)什么情况下不宜建立索引? 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。...可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。...您不能把任何值与一个 NULL 值进行比较,并在逻辑上希望获得一个答案。 使用 IS NULL 来进行 NULL 判断 48、主键、外键和索引的区别?
如果数据表主要用来插入和查询记录,则 MyISAM 引擎能提供较高的处理效率;如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的 Memory 引擎,MySQL...即在所有可以表示该列值的类型中,该类型使用的存储最少。 整数和浮点数 如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类 型。...对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。...在查询的时候,会看到在 WHERE子 句中使用条件,有的值加上了单引号,而有的值未加。单引号用来限定字符串,如果将值与字符串类型列进行比较,则需要限定引号;而用来与数值进 行比较则不需要用引号。...如果需求 发生变化,而触发器没有进行相应的改变或者删除,则触发器仍然会执行旧的语句,从而会影响 新的数据的完整性。因此,要将不再使用的触发器及时删除。
8、如果一个表有一列定义为 TIMESTAMP,将发生什么? 每当行被更改时,时间戳字段将获取当前时间戳。 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?...BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小写,对 TEXT 值不区分大小写。...如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。...在最频繁使用的、用以缩小查询范围的字段上建立索引。 在频繁使用的、需要排序的字段上建立索引 (4)什么情况下不宜建立索引? 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。...可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。
这是查询中 SELECT 的序号. 如果该值是 NULL 则表示该行引用其他行的联合结果 (union result)....请参阅第 8.2.2.2 节 使用物化优化子查询.partitions查询将匹配记录的分区. 如果该值为 NULL 则表明是非分区表.type联接类型....如果 MySQL 决定使用其中一个 possible_keys 索引来查找行, 则该索引被列为键值.可能 key 中的值中不存在的索引 possible_keys 中....(这个应该是联合索引可以用到前几个的情况)refref 列显示将哪些列或常量与 key 列中指定的索引进行比较以从表中选择行.如果值为 func, 则使用的值是某个函数的结果....除非您特别打算从表中获取或检查所有行, 否则如果 Extra 值不是 Using where 并且表连接类型是 `ALL` 或 `index`, 则您的查询可能有问题.- Using where with
8.0版本将会对AUTO_INCREMENT值进行持久化,MySQL重启后,该值将不会改变。...如果将自增计数器初始化为特定值,或者将自动递增计数器值更改为更大的值,新的值被持久化,即使服务器重启。在回滚操作之后立即重启服务器将不再导致重新使用分配给回滚事务的自动递增值。...如果将AUTO_INCREMEN列值修改为大于当前最大自增值(例如,在更新操作中)的值,则新值将被持久化,随后的插入操作将从新的、更大的值开始分配自动增量值。...这在一些服务级别要求比较高(7*24)的系统中,是非常方便的。该特性是由腾讯游戏DBA团队贡献的。如果未明确指定,则支持它的操作默认使用 ALGORITHM=INSTANT。...如果指定了 ALGORITHM=INSTANT 但不受支持,则操作会立即失败并出现错误。需要注意的是,在 MySQL 8.0.29 之前,一列只能作为表的最后一列添加。
索引是帮助 MySQL 高效获取数据的数据结构(有序)。...可以有多个 UNIQUE 常规索引 快速定位特定数据 可以有多个 全文索引 全文索引查找的是文本中的关键词,而不是比较索引中的值 可以有多个 FULLTEXT 在 InnoDB 存储引擎中,根据索引的存储形式...聚集索引选取规则: 如果存在主键,主键索引就是聚集索引 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引 如果表没有主键或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid...: 当回表拿到行数据还需要对email的值进行匹配,如果匹配成功则返回数据,然后二级索引里下一项如果也匹配,则拿到数据组装返回。...MySQL优化器会评估哪个字段的索引效率更高,会选择该索引完成本次查询 设计原则 针对于数据量较大,且查询比较频繁的表建立索引 针对于常作为查询条件(where)、排序(order by)、分组(group
) l 当不需要语言特定的比对功能时,使用二进制比对(binary collation)命令对来获取更快的比较和排序操作。...'; -> 1 mysql> SELECT BINARY 'a' = 'a '; -> 0 l 当需要比较不同列的值时,尽可能为那些列定义相同的字符集和比对方法,避免执行查询时进行字符串转换...当MySQL检索来自某记录行的任意值时,它会读取包含该记录行(也可能还有其它相邻行)所有列的数据块。保持每个记录行尽可能的小,仅含最频繁使用的列,这样允许在每个数据块中放入更多的记录行。...l 与其直接比较长文本字符串的相等性,可在某个单独的列中存储长文本所在列列值的哈希,并为存储哈希值的列建立索引,查询的时候测试哈希是否相等(使用MD5()、CRC32()函数生成哈希值)。...ANALYSE()用于检测优化数据类型是否应该为ENUM,如果有多余max_elements个补重复值,则ENUM不为建议类型。
对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。...基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。...很多时候是通过比较同一时间段内被更新的次数和利用该字段作为条件的查询次数来判断的,如果通过该字段的查询并不是很多,可能几个小时或是更长才会执行一次,更新反而比查询更频繁,那这样的字段肯定不适合创建索引。...对前10个或者20个字符进行索引能够节省大量索引空间,也可能会使查询更快。较小的索引涉及的磁盘IO较少,较短的值比较起来更快。...不能跳过索引中列。也就是说,上表的索引无法用于查找姓氏为 Smith 并且在某个特定日期出生的人。如果不指定名(first_name),则 MySQL 只能使用索引的第一列。
根据解析器的解析树,进一步检查表是否存在、列是否存在、名字和别名是否有歧义等。...如果一个关系满足1NF,并且除了主键以外的其它列,都依赖与该主键,则满足二范式(2NF),第二范式要求每个表只描述一件事。...但是该引擎是不支持全文搜索,同时启动也比较的慢, 它是不会保存表的行数的,所以当进行 select count(*) from table 指令的时候, 需要进行扫描全表。...4 利用最左前缀 ,N个列组合而成的组合索引,那么相当于是创建了N个索引, 如果查询时where子句 中使用了组成该索引的前几个字段, 那么这条查询SQL可以利用组合索引来提升查询效率。...如果表中该索引列数 据绝大多数是非空值,则使用is not null的时候走索引,使用is null的时候不走索引(还不如全表扫 描快),全表扫描;反之亦然。
innodb使用的B-Tree索引,在叶子节点存放了实际的索引列值如果是聚簇索引,则存储了整行的值,这样某些查询只需要使用索引就可以完成查询 劣势: 索引实际上也是一张表,保存了主键和索引字段,并指向实体类的记录...字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引。 MyISAM和InnoDB中都可以使用全文索引。...该ROWID字段会在插入新行时自动递增。 除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值。...就像上面的查询,B+树会先比较a列来确定下一步应该搜索的方向,往左还是往右。如果a列相同再比较b列。但是如果查询条件没有a列,B+树就不知道第一步应该从哪个节点查起。...例如: 无法使用索引查询name=dhy并且age1=1的记录,如果不指定age,则MySQL只能使用索引的第一列。 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查询。
领取专属 10元无门槛券
手把手带您无忧上云