MySQL
文章平均质量分 66
甜瓜瓜哥
这个作者很懒,什么都没留下…
展开
-
MySQL千万级数据的表如何优化
优化查询count:表数据大时,查询表count会很慢。所以另建一个表来存两个数据,即这个表的名称和所对应的count数。分页查询优化:给表数据创建索引,因为在有索引的情况下条件查询会比较快,然后进行子查询。参考资料MySQL千万级数据的表如何优化。原创 2023-12-06 01:37:21 · 321 阅读 · 0 评论 -
MySQL的优化方案
通过适当配置 innodb_buffer_pool_size 和 key_buffer_size 参数,可以优化缓冲池的大小,提高缓存命中率。避免使用 SELECT *,只选择需要的列,使用合适的 WHERE 子句以减小数据集,优化 JOIN 操作等。使用缓存机制,如 Memcached 或 Redis,可以在应用层缓存一些常用的查询结果,减轻数据库的压力。但要注意,过多或不必要的索引可能会导致性能下降,因此需要权衡。使用连接池可以减少数据库连接的开销,提高连接的重用率,从而减轻数据库服务器的负担。原创 2023-11-25 13:19:23 · 25 阅读 · 0 评论 -
MySQL优化经验
导入一个命名为xx.trace的文件,然后用JSON阅读器来查看(如果没有控制台权限,或直接交由运维,让他把该trace文件,输出给你就行了)。【注意】不设置优化器最大容量的话,可能会导致优化器返回的结果不全。原创 2023-11-25 13:10:34 · 30 阅读 · 0 评论 -
数据库复习题
对于低基数(即列中不同值的数量相对于行数来说很少)的列,位图索引可以极大地提高查询性能。它们在执行复杂的查询(如多列的 AND、OR、NOT 操作)时尤其有效,因为可以快速地对不同列的位图进行逻辑操作。:位图索引特别适合于数据仓库的查询模式,因为数据仓库通常涉及大量的聚合和多维分析查询,这些查询通常在少数几个列上进行过滤。:位图索引在存储上非常高效,特别是对于那些具有少量不同值的列(如性别、国家、状态等)。:位图索引在某些数据库系统中可以有效支持并行查询处理,这对于大型数据仓库环境是非常有利的。原创 2023-11-02 23:18:21 · 53 阅读 · 0 评论 -
sql中的关键字
然后将子查询作为条件,来决定主查询的结果是否保留。right join:在两张表进行连接查询时,left join:在两张表进行连接查询时,union all:对两个结果集进行。union:对两个结果集进行。minus:对两个结果集进行。,可以比较null值。,同时进行默认规则的排序。,同时进行默认规则的排序。,同时进行默认规则的排序。,在两张表进行连接查询时,:两个值进行比较,,然后将子查询的结果。原创 2023-11-01 20:06:27 · 133 阅读 · 0 评论 -
优化数据库查询的十大方法
参考资料:如何优化数据库查询原创 2023-11-01 19:58:31 · 539 阅读 · 0 评论 -
DBMS的分类
NoSQL DBMS,不依赖于固定模式,可以处理半结构化、非结构化和高度变化的数据。OLAP,用于分析大量的历史数据,通常需要支持复杂的查询和聚合操作。OLTP,用于处理日常的交易性操作,通常需要快速的读写能力。数据存储在磁盘上,可以处理大规模数据但通常读写速度较慢。OODBMS,以面向对象的方式来组织和处理数据。数据分布在多个计算机上,可以处理大规模数据集。数据存储在内存中,可以实现非常快速的读写操作。RDBMS,基于关系模型,使用表来组织数据。运行在单个计算机上,处理相对较小的数据集。原创 2023-10-30 10:19:22 · 338 阅读 · 0 评论 -
MySQL是先写入数据还是写log
所以,在绝大多数情况下,MySQL的写入流程是先写入日志,再写入数据文件。这种策略能够确保数据的一致性和持久性,并提供了数据复制和恢复的功能。这样,在主从复制的场景下,从服务器可以通过读取Binary Log中的修改操作,实时复制主服务器上的数据变更,保持主从数据库的一致性。当执行事务提交时,MySQL首先将事务的修改操作记录到Redo Log中,然后异步地将这些修改操作刷新到磁盘的数据文件。原创 2023-07-27 14:35:31 · 614 阅读 · 0 评论 -
除了undolog还有什么log在数据库中发挥着作用
这三种日志在MySQL中发挥了关键的作用,确保了数据库的完整性、持久性,并提供了数据复制和恢复的机制。原创 2023-07-27 14:28:23 · 65 阅读 · 0 评论 -
MySQL保证写入完整性的方式
这样可以确保插入的数据符合预期的格式和规范,避免数据不完整或者错误的写入。触发器是一种在数据插入、更新或删除时自动执行的动作,可以在数据变更前后加入自定义的检查和处理逻辑,以确保数据的完整性。定期进行数据备份,并确保可以成功恢复数据,可以在数据丢失或者写入错误时进行恢复,保证数据的完整性。通过授权和权限控制,可以限制用户对数据库的访问和写入操作,确保只有合适的用户可以对数据进行写入。通过存储过程和函数,可以将复杂的数据写入操作封装起来,确保写入的完整性和一致性。原创 2023-07-27 14:16:26 · 177 阅读 · 0 评论 -
红黑树和B+树的区别
总体而言,红黑树和B+树是两种不同的数据结构,各自适用于不同的应用场景。红黑树适合内存中的数据结构,而B+树适合大规模数据在外存中的存储与检索。原创 2023-07-26 21:32:10 · 1906 阅读 · 0 评论 -
MySQL存储引擎原理
需要注意的是,随着MySQL的发展,InnoDB在大多数场景下成为了首选的存储引擎,因为它提供了更好的事务支持、并发性能以及崩溃恢复能力。MyISAM则逐渐被弃用,除非有特殊的需求,否则建议使用InnoDB引擎。其他存储引擎也各有特点,可以根据具体需求来选择合适的存储引擎。原创 2023-07-26 11:45:52 · 88 阅读 · 0 评论 -
监控MySQL的工具
这是一组流行的开源工具,可以通过Prometheus监控MySQL数据库,然后使用Grafana创建漂亮的仪表板进行可视化。由Oracle提供的商业工具,提供实时和历史性能监控,包括查询性能、服务器状态、数据库复制等。虽然它是一个通用的网络监控工具,但可以使用插件来监控MySQL数据库的各种指标。类似于Nagios,是一个通用的网络监控工具,但也支持MySQL数据库监控。这是一个基于命令行的工具,用于实时监控MySQL数据库的性能。,提供对MySQL数据库的性能和状态的实时监控。原创 2023-07-26 11:35:38 · 1909 阅读 · 0 评论 -
关于MySQL性能优化的理解
MySQL是一个磁盘io访问非常频繁的关系型数据库,在高并发和高性能的场景中MySQL数据库必然会承受巨大的并发压力。因此针对这两个点我们需要注意的是全局参数的设定对于已经存在的会话是无法生效的,会话参数的设定,随着会话的销毁而失效。在硬件基础资源的优化中我们重点关注的是服务本身所承载的体量,然后提出合理的指标要求避免出现资源浪费的一个现象。从操作系统层面上来说,应用文件句柄数、操作系统的网络配置都会影响到mysql的性能优化。全局的统一配置建议配置在默认配置文件中,否则重启服务会导致配置失效。原创 2023-07-26 11:29:35 · 78 阅读 · 0 评论 -
MySQL主从同步过程以及全同步、半同步
这样可以提高主库的写入性能,但可能会导致主从数据稍有延迟,因为并非所有从库都已经同步完成。需要注意的是,全同步模式相对于半同步模式来说,数据的一致性更高,但性能代价也更大。从数据库接收到主库发送的二进制日志后,从库会按照接收到的顺序逐条应用这些日志中的数据修改操作,使得从库的数据与主库保持同步。从库在同步过程中会记录自己已经成功同步的位置,以便在发生断线或重新连接时,能供从上次同步的位置继续。这确保了主从数据的完全一致性,但也导致主库的写入性能降低,因为主库需要等待从库的确认。原创 2023-07-26 10:44:37 · 616 阅读 · 0 评论 -
Inner join、Left join和Right join的区别
连接操作是指通过连接条件将多个行的表拼接起来。原创 2023-07-24 11:27:40 · 151 阅读 · 0 评论 -
mongodb与mysql性能比较
不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个数据仓库来使用。MySQL的插入是分钟级别的,MongoDB的插入是秒级别的。但是MongoDB的查询慢一些,但是加上索引之后特别快。前提:分别插入100万条记录,并对其做100个用户并发查询操作。电子商务系统等需要连多表查询的功能。日志系统,股票数据等。原创 2023-07-10 16:32:47 · 1083 阅读 · 0 评论 -
联合索引的实现原理和底层结构
联合索引(Composite Index)是指在数据库中创建的基于多个列的索引。它的作用是提高多个列上的查询效率,以减少数据库的读取和搜索时间。联合索引的实现和底层结构与具体的数据库管理系统(DBMS)有关。联合索引使用多个列的组合作为索引键,基于B树或B+树的底层结构进行排序和存储。这种结构能够快速定位和筛选符合查询条件的数据行,提高数据库查询的效率。原创 2023-07-10 23:51:49 · 285 阅读 · 0 评论 -
用户登录的验证方法
这是一个简单而直接的实现方式。这种方式通常涉及将用户密码进行哈希和加盐,然后将其与数据库中存储的哈希密码进行比较。但是,这种自定义实现可能会存在安全风险,例如密码哈希不正确、缺乏会话管理、不适当的密码策略等。在用户登录功能中,常见的实现方式包括使用身份验证框架(如Django的认证框架、Ruby on Rails的Devise、Spring Security等)或直接在数据库中比较用户名和密码。(Salting):指在密码哈希过程中引入一个随机的、唯一的字符串(盐),将其与密码进行组合后再进行哈希计算。原创 2023-07-09 10:58:52 · 285 阅读 · 0 评论 -
InnoDB是如何实现隔离级别的
InnoDB是MySQL数据库引擎的一部分,它通过使用多版本并发控制(MVCC)来实现隔离级别。MVCC是一种用于处理并发访问的技术,它通过为每个事务创建不同的数据版本来实现隔离。原创 2023-07-08 18:14:13 · 161 阅读 · 0 评论 -
MySQL中使用B+树的优点、特点及其数据查找流程
在B+树中,节点内部通常存储关键字和对应的指针,指针可以指向子节点或叶子节点。叶子节点中存储了关键字和对应的数据。B+树是一种自平衡的树结构,通过节点的分裂和合并来保持树的平衡,使得所有叶子节点的深度相同,提高了查询的效率。B+树的高度相对较低,通过几次磁盘IO就能快速定位到目标数据所在的叶子节点,从而实现高效的查找操作。叶子节点存储了所有关键字和对应的数据,且通过指针链表连接在一起,形成有序的叶子节点序列。B+树的节点可以存储更多的关键字和数据,减少了磁盘IO次数,提高了数据访问的效率。原创 2023-07-08 10:52:31 · 654 阅读 · 0 评论 -
将数据库数据的访问由单线程转变成多线程
通过以上的努力和解决方案,我成功地将数据库数据的访问由单线程转变成了多线程。这样,在实际生产环境中处理大量数据和频繁的数据库IO操作时,我们能够更高效地进行数据处理和传输,以满足项目需求。这个经历有助于加深对多线程编程和系统架构的理解,能提升问题解决能力和技术能力。参考资料单线程程序转为多线程(场景)单线程处理转换成多线程。原创 2023-07-06 20:36:14 · 127 阅读 · 0 评论 -
MySQL中除了那常见的两种引擎,你还知道哪些呢
MySQL默认的事务性存储引擎。它支持ACID(原子性、一致性、隔离性和持久性)事务,并提供了。适用于高可用性和高性能的分布式集群环境,可以提供数据分片和复制功能。这是MySQL的另一种常见存储引擎。它不支持事务和行级锁定,但具有。中,对于需要快速读写的临时数据非常有用,但是在MySQL重。数据库存储引擎,适用于高可用性和高性能的应用程序。的存储引擎,适用于大量历史数据的存储和归档。原创 2023-07-06 09:59:38 · 85 阅读 · 0 评论 -
MySQL中分页Limit关键字的使用
从0开始计数的,仍然是取n行数据。原创 2023-07-05 16:54:45 · 61 阅读 · 0 评论 -
索引的作用
索引是一种重要的数据结构,它提供了一种快速访问和检索数据的方法,可以显著提高数据库和其他信息系统的性能和效率。原创 2023-07-05 16:29:08 · 1561 阅读 · 0 评论 -
MySQL中CHAR和VARCHAR类型的区别
通常来说,只有存储固定长度的数据时才会使用。例如身份证,邮政编码,MD5值等。n = (行存储最大字节数 - NULL标识列占用字节数 - 长度标识字节数)/ 字符集单字符最大字节数。VARCHAR类型节省存储空间,一般用于存储长度不固定的内容,例如名字、电子邮箱、产品描述等。如果存储的内容小于n个字符,将会使用空格进行填充,查询时自动截断尾部空格。VARCHAR(n)表示长度可变的字符串,n表示允许的最大字符数量。CHAR(n)表示长度固定的字符串,n表示字符数量,最大255。原创 2023-07-05 12:19:03 · 99 阅读 · 0 评论 -
InnoDB引擎的特点
InnoDB引擎在处理大量插入操作时,可能会有一些额外的开销,因为它需要维护事务日志和行版本信息。它还支持行级锁定,使得不同事务可以同时对表中不同的行进行读写操作,提高了并发性能。当定义外键关系时,InnoDB会自动执行级联操作(如级联删除和级联更新)来保持数据的一致性。InnoDB采用行级锁定来实现并发控制,这使得多个事务可以同时对表中不同的行进行读写操作,提高了并发性能和并发处理能力。InnoDB具有良好的崩溃恢复机制。它支持事务的提交和回滚,并提供了多版本并发控制(MVCC)来处理并发事务。原创 2023-07-04 15:50:09 · 130 阅读 · 0 评论 -
InnoDB索引的数据结构
但是平衡二叉树一个节点只存储一行的数据,当数据量比较大的时候,它的高度就会越来越大,那么磁盘I/O也就会越来越大。所以他是不符合咱们的要求的。前面也提到了,链表的查询效率是非常低的,不太符合要求。:在二叉搜索树的基础上,节点的左子树和节点的右子树的高度差不能超过1。B+树:是B树的变种,既非叶子节点只存储索引,叶子节点存储索引和数据。链表:虽然它更新的效率比较高,但是查询的时候需要全表查询。:节点的左子树小于该节点,节点的右子树大于该节点的二叉树。图中最大的子节点数量是3,所以该B树是一个三阶B树。原创 2023-07-04 15:34:09 · 142 阅读 · 0 评论 -
索引查询数据过程
左边这个是一个B+树,这个B+树的每一个节点就是我们的主键ID,这个15、56、77就是他的主键id,然后B+树的最后一层,他是这个叶子节点,大家看一下这个叶子节点上面存储的数据:他这里存放的是数据的地址。我们想查找名字为Jim的这个数据,首先我们通过这个B+树,找到这个Jim节点,然后Jim节点他对应的这个主键id是20,他拿到id等于20的这个主键,再来左边的这个索引树来查找这个相应的数据。左边这个聚簇索引存储的是一整行的数据,而右边的这个辅助索引,它存储的只有这个id主键值。原创 2023-07-01 16:09:13 · 479 阅读 · 0 评论 -
联合索引ABC查询条件AC索引可用吗
联合索引 A, B, C 可以部分利用,可以用于快速定位满足查询条件 A 的行,但对于条件 C 的筛选可能需要更多的行扫描。对于更好的性能,如果查询频率较高且需要使用到条件 C,可以考虑创建针对列 A 和 C 的单独索引。原创 2023-07-01 11:31:59 · 1354 阅读 · 0 评论 -
MySQL 的一条语句是如何执行的?
只是在这种情况下,他保证了你不管是你通过什么状态来恢复,他的数据是一致的,比如说第一种情况或者前面两种情况,你这个只有这个redo log的prepare或者你连这个redo log的prepare都没有,你通过bin log的日志回放的时候,因为通常你需要恢复数据的时候或者说回滚数据的时候,你都是把这个bin log来指定到某一点。你的bin log记录的也是2。这样的话,他的数据就能够保持一致或者说你有一些主从同步的数据,也能够通过同步他的bin log,然后恢复他的2,后面的状态其实是一样的。原创 2023-06-29 16:18:28 · 165 阅读 · 0 评论 -
哪些字段需要加索引
需要注意的是,添加索引也会带来一些开销。索引需要额外的存储空间,并且在进行插入、更新和删除操作时需要维护索引,这可能会降低写入性能。因此,在决定添加索引之前,应该仔细考虑数据库的整体性能需求,并在需要时进行测试和优化。此外,索引的选择、设计和维护也是一个复杂的课题,可以依靠数据库性能专家的经验和工具来进行更详细的分析和决策。原创 2023-06-29 14:16:44 · 569 阅读 · 0 评论 -
主键索引和非主键索引在B+树上的区别
非主键索引是基于表的非主键列(或多列)构建的索引。非主键索引的键值可以包含重复值。主键索引和非主键索引在B+树上的区别在于叶节点的存储方式和索引的键值唯一性。主键索引可以直接定位到记录数据,键值唯一。而非主键索引需要通过主键索引进一步定位,键值可以重复。原创 2023-06-28 20:09:55 · 145 阅读 · 0 评论 -
主键索引和非主键索引的区别
总的来说,主键索引是表的唯一标识索引,具有唯一性和快速访问的特点;而非主键索引可以提供更多的灵活性和覆盖更多的查询场景,但可能性能略低于主键索引。原创 2023-06-28 19:44:31 · 1020 阅读 · 0 评论 -
MySQL日志系统的介绍
log_queries_not_using_indexed 没有使用索引记录慢日志。log-bin = mysql-bin my.ini在mysqld模块下设置配置。binlog记录了对MySQL数据库DML生效的完整的语句。的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来(long_query_time 请求时间超过多少记录慢日志。slow_query_log 开启慢日志。固定大小,到了一定大小会增加不会覆盖。,避免ibdata太大,用来回滚的。,当然也可以用回滚。原创 2023-06-27 12:33:09 · 58 阅读 · 0 评论 -
MySQL中的几种日志
当事务提交时,对数据的修改首先记录到Redo日志中,然后才将数据写入磁盘。原创 2023-06-27 11:28:16 · 336 阅读 · 0 评论 -
MySQL的B+树原理
所以可以存储共4300万条数据,相当于到了4000万级别的数据量,而每个二级索引它又可以指向1170个一级索引,而每个一级索引又可以指向1170个叶子节点,这样我们就把一个B+树构建完了。然后去顺序读,可见,即使在这种千万级别的MySQL表中,如果想要查找某条数据或者用范围查找所花费的IO,也仅仅就是3次,就可以做到。在MySQL中,所有的数据都是存储在page中的,由page去管理这些数据。因此,我们可以看见,在文件系统中,即使这个文件只存储了一个字节的数据,但是他占用的物理数据仍然是4KB。原创 2023-06-27 11:04:13 · 185 阅读 · 0 评论 -
哪些SQL的关键字会让索引失效
需要注意的是,索引的使用和失效还受数据库管理系统的具体实现和优化策略的影响。对于不同的数据库系统,一些情况下可能会有额外的情况导致索引失效。因此,在设计数据库和查询时,需要考虑具体的数据库系统和查询优化的特性。原创 2023-06-25 17:42:14 · 465 阅读 · 0 评论 -
mysql中空字段值导致查询页面无法翻转问题的解决
在这个具体的场景中,当初步的排查步骤包括检查日志、手动执行查询和确认前后端传递参数等,并未找到问题的根本原因。因此,我们需要拓展思路,考虑更广泛的可能性。空值和异常值是数据库查询中常见的问题,它们可能导致查询结果的异常或不完整。考虑到试卷发布信息列表的数据显示问题,其中试卷标题是一个重要的字段。如果存在空值或异常值,可能会导致分页逻辑出现问题,无法正确显示下一页的数据。空值和异常值是数据库查询中常见的问题,它们可能导致查询结果的异常或不完整。原创 2023-06-25 17:13:56 · 68 阅读 · 0 评论 -
搞懂mysql中的mvcc机制
mvcc称为多版本并发控制。这里有两个关键字,一个是多版本,一个是并发。原创 2023-06-24 20:47:11 · 39 阅读 · 0 评论