随笔分类 -  MySQL 面试题

摘要:主从复制的步骤 复制解决的基本问题是让一台服务器的数据与其他服务器保持同步,一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。 主库和备库之间可以有多种不同的组合方式。 MySQL 支持两种复制方式: 基于行的复制和基于语句的复制,基于语句的复制也称为逻辑复制,从 My 阅读全文
posted @ 2022-04-06 17:13 张三丰学Java 阅读(33) 评论(0) 推荐(0) 编辑
摘要:优化 COUNT 查询 COUNT 是一个特殊的函数,它可以统计某个列值的数量,在统计列值时要求列值是非空的,不会统计 NULL 值 如果在 COUNT 中指定了列或列的表达式,则统计的就是这个表达式有值的结果数,而不是 NULL。 COUNT 的另一个作用是统计结果集的行数,当 MySQL 确定括 阅读全文
posted @ 2022-04-06 16:35 张三丰学Java 阅读(36) 评论(0) 推荐(0) 编辑
摘要:执行计划是 SQL 调优的一个重要依据,可以通过 EXPLAIN 命令查看 SQL 语句的执行计划, 如果作用在表上,那么该命令相当于 DESC。 EXPLAIN 的指标及含义如下: | 指标名 | 含义 | | | | | id | 表示 SELECT 子句或操作表的顺序,执行顺序从大到小执行,当 阅读全文
posted @ 2022-04-06 11:57 张三丰学Java 阅读(96) 评论(0) 推荐(0) 编辑
摘要:从 MySQL5.6 开始,可以通过 trace 文件进一步获取优化器是是如何选择执行计划的 在使用时需要先打开设置,然后执行一次 SQL,最后查看 information_schema.optimizer_trace 表的内容 该表为联合表,只能在当前会话进行查询,每次查询后返回的都是最近一次执行 阅读全文
posted @ 2022-04-06 10:52 张三丰学Java 阅读(94) 评论(0) 推荐(0) 编辑
摘要:通过 SHOW PROFILE 可以分析 SQL 语句性能消耗 例如查询到 SQL 会执行多少时间,并显示 CPU、内存使用量,执行过程中系统锁及表锁的花费时间等信息。 例如 SHOW PROFILE CPU/MEMORY/BLOCK IO FOR QUERY N 分别查询 id 为 N 的 SQL 阅读全文
posted @ 2022-04-06 10:14 张三丰学Java 阅读(48) 评论(0) 推荐(0) 编辑
摘要:通过慢查询日志定位,可以通过慢查询日志定位那些已经执行完毕的sql语句 使用show processlist查询 慢查询日志在查询结束后才记录,所以在应用反应执行效率出现问题的时候查询慢查询日志不能定位问题,此时可以用show processlist查看当前MySQL正在进行的线程,包括线程的状态、 阅读全文
posted @ 2022-03-14 10:23 张三丰学Java 阅读(51) 评论(0) 推荐(0) 编辑
摘要:如果索引列出现了隐式类型转换,则MySQL不会使用索引 在where子句中字段类型是字符串,值是数值,如果没有加引号则MySQL不会使用索引 where条件中含有or,除非or前面使用了索引列而or之后是非索引列,索引会失效(回表次数过多导致) MySQL不能在索引中执行like操作,这是底层存储引 阅读全文
posted @ 2022-03-14 09:49 张三丰学Java 阅读(40) 评论(0) 推荐(0) 编辑
摘要:建立索引 对查询频次较高,数据量较大的表建立索引 索引字段应该从where子句条件中提取 where子句组合较多,应该挑选最常用,过滤效果最好的列的组合 业务上具有唯一特征的字段,即使是多个字段的组合,也必须建成唯一索引 使用前缀索引 索引列开始的部分字符,索引建立之后也是用硬盘来存储,因此短索引可 阅读全文
posted @ 2022-03-14 09:35 张三丰学Java 阅读(55) 评论(0) 推荐(0) 编辑
摘要:覆盖索引是指一个索引包含或者覆盖了所有需要查询的字段的值,不需要根据索引回表查询数据 覆盖索引必须要存储索引列的值,因此MySQL只能用BTree索引做覆盖索引 索引条目通常远小于数据行大小,极大减少数据访问量 因为索引按照顺序存储,所以io密集型查询会比随机从磁盘读取每一行数据的io少的多 inn 阅读全文
posted @ 2022-03-11 16:57 张三丰学Java 阅读(892) 评论(0) 推荐(0) 编辑
摘要:聚簇索引不是一种索引类型,而是一种数据存储方式 innoDB的聚簇索引是在一个文件中保存了B+树的索引和数据行 当表有聚簇索引的时候,它的行数据是存放在索引的叶子中 innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引 阅读全文
posted @ 2022-03-11 16:33 张三丰学Java 阅读(580) 评论(0) 推荐(0) 编辑
摘要:如果希望通过关键字匹配进行查询,就需要基于相似度的查询,而不是精准的数值比较,这时候就需要用到全文索引。 myisam的全文索引是一种特殊的B-Tree索引,一共有2层。 第一层是所有关键字,然后对于每个关键字的第二层,包含的是一组相关的文档指针 全文索引不会索引文档对象的所有词语,而是根据规则过滤 阅读全文
posted @ 2022-03-11 15:04 张三丰学Java 阅读(70) 评论(0) 推荐(0) 编辑
摘要:myisam表支持空间索引,可以用作地理数据存储。 这类索引不需要前缀查询。空间索引会从所有维度来索引数据。查询的时候可以有效的用任意维度来组合查询。 它必须使用MySQL的GIS(地理信息系统)的相关函数来维护数据。 但是MySQL对GIS的支持不完善,所以不常用这个 阅读全文
posted @ 2022-03-11 14:54 张三丰学Java 阅读(162) 评论(0) 推荐(0) 编辑
摘要:自适应哈希索引是innoDB的一个特殊功能,当它注意到某些索引值被使用的非常频繁的时候,会在内存中基于B+树索引之上再建立一个哈希索引,这样就可以让BTree索引也具有哈希索引的一些优点,比如快速哈希查找。 这是一个完全自动的内部操作,用户无法配置或者控制,但是可以关闭 阅读全文
posted @ 2022-03-11 14:49 张三丰学Java 阅读(95) 评论(0) 推荐(0) 编辑
摘要:哈希索引基于哈希表实现,只有精准匹配索引所有列的查询才有效。 对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值计算出的哈希码也不一样。 只有memory引擎显式支持哈希索引,这也是memory引擎的默认索引类型 因为索引自身只需要存储对应的哈希值,所以索引 阅读全文
posted @ 2022-03-11 14:46 张三丰学Java 阅读(218) 评论(0) 推荐(0) 编辑
摘要:大多数 MySQL 引擎都支持这种索引,但底层的存储引擎可能使用不同的存储结构,例如 NDB 使用 T-Tree,而 InnoDB 使用 B+ Tree。 InnoDB会显示BTree,但是实际上是B+Tree,可以理解为B+Tree是一种特殊的BTree B+树所有值都是按顺序排列存储,每个叶子到 阅读全文
posted @ 2022-03-11 14:22 张三丰学Java 阅读(93) 评论(0) 推荐(0) 编辑
摘要:索引也叫键,是存储引擎用于快速找到记录的一种数据结构 当表中数据越大的时候,索引对性能的影响越重要。 数据量小并且负载低的时候,不恰当的索引对性能的影响不明细,但是数据量增大,性能就会急剧下降 索引大大减少了服务器需要扫描的数据量,可以帮助服务器避免排序和临时表,可以将随机io变成顺序io 用索引不 阅读全文
posted @ 2022-03-11 09:22 张三丰学Java 阅读(283) 评论(0) 推荐(0) 编辑
摘要:更小的通常更好 一般情况下尽量选择可以正确存储数据的最小数据类型 数据类型越小通常越快,因为他们占用更少的磁盘、内存和cpu缓存 尽可能简单 简单数据类型的操作通常需要更少的cpu周期,例如整数比字符操作代价更低,因为字符集和校对规则使得字符相比整型更复杂 应该使用MySQL的内建类型date、ti 阅读全文
posted @ 2022-03-10 16:53 张三丰学Java 阅读(33) 评论(0) 推荐(0) 编辑
摘要:DATATIME 能保存大范围的值,从1001-9999年,精度为秒 把日期和时间封装到了一个整数中,与时区无关 使用8字节存储空间 TIMESTAMP 和UNIX时间戳相同 只使用4字节的存储空间 范围比DATATIME小的多,只能表示1970-2038年,并且依赖于时区 阅读全文
posted @ 2022-03-10 16:22 张三丰学Java 阅读(179) 评论(0) 推荐(0) 编辑
摘要:如果需要快速访问数据,并且这些数据不会被修改,重启以后丢失也没关系,这样的情况下使用memory表很有用。memory表至少比myisam快一个数量级,因为所有的数据都保存在内存,不需要磁盘IO,memory表的结构在重启后会保留,但是数据会丢失。 memory表支持哈希索引,因此查找速度极快。但是 阅读全文
posted @ 2022-03-10 15:38 张三丰学Java 阅读(72) 评论(0) 推荐(0) 编辑
摘要:MySQL5.1以及之前,myisam是默认存储引擎,myisam提供了大量的特性,包括全文索引、压缩、空间函数等,但不支持事务和行锁,最大的缺陷是崩溃后无法安全恢复。对于只读的数据或者表比较小、 可以忍受修复操作的情况,还是可以选择用myisam。 myisam将表存储在数据文件和索引文件中,分别 阅读全文
posted @ 2022-03-10 15:16 张三丰学Java 阅读(147) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示