96SEO 2026-02-19 21:37 0
第二层架构主要完成大多数的核心服务功能#xff0c;如SQL…MySQL的引擎与体系结构

最上层是一些客户端和链接服务主要完成一些类似于连接处理、授权认证、及相关的安全方案。
服务器也会为安全接入的每个客户端验证它所具有的操作权限
第二层架构主要完成大多数的核心服务功能如SQL接口并完成缓存的查询SQL的优化和分析部分内置函数的操作。
所有跨存储引擎的功能也是在这一层实现的如过程、函数等
存储引擎真正的负责MySQL中个数据的存储与提取服务器通过API和存储引擎进行通信不同的存储引擎具有不同的功能这样子我们也可以根据自己的需求来选取合适的存储引擎
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式存储引擎是基于库的所以存储引擎也可以被称为表类型
InnoDB是一种兼顾高可靠性和高性能的通用存储引擎在MySQL5.5版本之后InnoDB是默认的MySQL的引擎。
DML(增删改)操作支持ACID(原子性、一致性、隔离性、持久性)模型支持事务行级锁提高并发访问的性能支持外键Foreign
xxx.ibd:xxx代表的是表明innoDB引擎的每张表都会对应着这样的一个表文件存储该表的表结构(frm、sdi)、数据和索引参数innodb_file_per_table
默认为no表示每张表各自占用一个表空间如果为yes表示多张表共用一个表空间
但是这个文件是一个二进制文件没法直接查看但是可以借助指令来进行一个查看
Memory引擎的表数据是存储在内存中的由于受到硬件问题、断电问题的影响只能将这些表作为临时表或者缓存使用
特点InnoDBMyISAMMemory存储限制64TB有有事务安全支持--锁机制行锁表锁表锁Btree索引支持支持支持hash索引--支持全文索引5.6之后支持支持-空间使用高低内存使用高低中等批量插入速度低高高支持外键支持--
InnoDB是MySQL的默认引擎支持事务、外键如果应用对事物的**完整性**有比较高的要求在并发条件下要求数据的一致性数据操作除了插入和查询外还包含很多更新、删除操作那么InnoDB存储引擎是比较合适的选择
MyISAM如果应用是以读操作和插入操作为主只有很少的更新和删除操作并且对事物的完整性、并发性要求不是很高那么选择这个存储引擎比较合适
Memory将所有数据保存在内存中访问速度快通常用于临时表及缓存。
Memory缺陷是对标的大小有限制太大的表无法缓存在内存中而却无法保证数据的安全性
索引index是帮助MySQL搞笑获取数据的数据结构有序在数据之外数据库系统还维护者满足特定查找算法的数据结构这些数据结构以某种方式引用指向数据这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引
优点缺点提高数据检索的效率降低数据库的IO成本索引列也是要占用空间的通过索引列堆数据进行排序降低数据排序的成本索引大大提高了查询效率同时也降低更新表的速度如对表进行Insert、update、delete操作时效率降低但实际上查询操作更多而增改删操作较少
MySQL的索引是在存储引擎曾实现的不同的存储引擎有不同的结构主要包括以下几种
索引结构描述BTree索引最常见的索引类型大部分引擎都支持B树索引Hash索引底层数据结构是通过哈希表实现的只有精确匹配索引列的查询才有效不支持范围查询R-Tree空间索引空间索引是MyISAM引擎的一个特殊索引类型主要用于地理空间数据类型比较少用Full-text全文索引是一种通过建立倒排索引快速匹配文档的方式类似于ES
索引InnoDBMyISAMMemoryBTree索引支持支持支持Hash索引不支持不支持支持R-Tree索引不支持支持不支持Full-text5.6版本之后支持支持不支持
二叉树的缺点顺序插入时会形成链表查询性能大大降低。
大数据量的情况下层级较深检索速度较慢
红黑树能够解决顺序插入形成链表的情况但是在大数据量的情况下层级较深索引速度较慢
B-Tree多路平和查找树:以一颗最大度数max-degree为5阶的b-tree为例每个节点最多存储4个key5个指针【树的度数指的是一个结点的子结点个数】
MySQL的B树相对于经典的B树进行了优化在原有的B树的基础上增加了一个指向相邻叶子节点的链表指针就形成了带有顺序指针的B树提高区间访问性能
哈希索引就是采用一定的Hash算法将键值换算成新的hash值映射到对应的槽位上然后存储在hash表中
如果两个或多个键值映射到一个相同的槽位上他们就会产生hash冲突可以通过链表进行解决
Hash索引只能用于对等比较in不支持范围查询无法利用索引完成排序操作查询效率高通常只需要一次检索就可以了效率通常高于BTree索引
在MySQL中支持hash索引的是memory引擎而innodb中具有自适应hash功能hash索引是存储引擎根据B树索引在指定条件下自动构建的
相对于二叉树层级更少搜索效率更高相对于B-Tree无论是叶子节点还是非叶子节点都会存储数据这样导致一页中存储的键值减少指针跟着减少要同时保存大量数据只能增加树的高度导致性能降低相对于Hash索引BTree支持范围匹配和排序操作
分类含义特点关键字主键索引针对于表中逐渐创建的索引默认自动创建只能有一个PRIMARY唯一索引避免同一个表中的某个数据列中的重复值可以有多个UNIQUE常规索引快速定位特定数据可以有多个全文索引全文索引超找的是文本中的关键词而不是比较索引中的值可以有多个FUNNTEXT
index将数据存储与索引放在一块必须有而且只能有一个非聚集索引/二级索引/辅助索引Secondary
index将数据与索引分开存储索引结构的叶子节点关联的是对应的主键可以存在多个
如果存在主键主键索引就是聚集索引如果不存在逐渐将使用第一个唯一(UNIQUE)索引作为聚集索引如果表没有逐渐或没有合适的唯一索引则InnoDB会自动生成一个rowid作为隐藏的聚集索引
Arm查询条件是name那么就先走二级索引二级索引查找到之后就会拿到这一行的主键ID根据主键在聚集索引中进行查询找到这一行的数据。
回表查询指的是现在二级索引中找到主键值然后再到主键索引中找到对应的行这种查询被称为回表查询
(index_col_name,....)一次可以创建多个索引如果使用UNIQUE或者FULLTEXT
status命令可以提供服务器状态信息。
通过下面指令可以看到当前数据库的insert
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位秒默认为10s)的所有SQL语句的日志。
MySQL的慢查询日志默认没有开启需要在MySQL的配置文件(/etc/my.cnf)中配置
设置慢日志的时间为2s如果语句执行时间超过了2s就会被视为慢查询记录慢查询日志
profiles能够在做SQL优化时帮助我们了解事件都消耗到哪里去了。
通过have_profiling参数能够看到当前MySQL是否支持profile操作
have_profiling;默认情况下profiling是关闭的可以通过set语句在session/global级别开启profiling
profiling;如果为1则表示已经打开这里为0表示没有打开需要再进行一次设置设置成功后再次查询
EXPLAIN或者DESC命令获取MySQL如何执行select语句的信息包括在select语句执行过程中如何连接和连接顺序
select查询的序列号表示查询中执行select子句或者是操作表的顺序(Id相同执行顺序从上到下Id不同值越大越先执行)。
表示select的查询类型常见的取值有SIMPLE见到表及不使用表连接或者子查询、PRIMARY(主查询即外层的查询)
UNIONUNION中的第二个或者后面的查询语句、SUBQUERYSelect/where之后包含了子查询等等
根据唯一主键进行查询会返回CONST非唯一主键返回refnull几乎达不到除非不查询任何表
表示索引中使用的字节数该职位为索引字段最大可能值并非实际使用长度在不损失精确性的前提下长度越长越好
MySQL认为必须执行的查询的行数在innodb引擎的表中是一个预估值可能并不总是准确。
表示返回结果的行数占需读取行书的百分比filtered越大越好
如果索引了多列联合索引要遵守最左前缀法则最左前缀法则指的是查询从索引最左列开始并且不能够跳过索引中的列如果条约某一列索引将部分失效后面的字段索引失效
3;这样的话就会走联合索引查出来的key_len等于ABC三个字段的和
B2;这样子仍然走联合索引但是key_len等于AB两个字段的长度
3;这样子走索引但是key_len等于A的长度则表示C已经被丢失对应了后面的索引失效
自己创建了一个表和一个联合索引用nick_name和address
字符串%不会出现任何问题还是会走索引如果是%字符串%则不会走索引CONCAT也相同
如果只是尾部模糊匹配索引不会失败如果是头部模糊匹配索引则会失效
用or分隔开的条件如果or前的条件中的列有索引而后面的列中没有索引那么设计的索引都不会被用到
shop.tb_newbee_mall_user;在这里使用or进行连接
0;按照正常流程这个操作是要走索引的此外nick_name全都比0大
说明MySQL在选择扫描全表还是走索引会进行评估这个评估和数据分布有关
我们知道nick_name和address是一个联合索引在这里我将nick_name设置成为一个单列索引
shop.tb_newbee_mall_user(nick_name);查看所有的索引
可以看到此时的nickname已经存在两个索引那么执行下面SQL
2;最后还是走了联合索引说明在这时MySQL自己做出了选择那么如何规避这个选择这时候就是用到了SQL提示
SQL提示是优化数据库的一个重要手段简单来说就是SQL语句中加入一些认为的提示来达到优化的作用
尽量使用覆盖索引查询使用了索引并需要返回的列在该列中已经全部能找到减少使用
查找使用了索引但是需要的数据都在索引列中能够找到不需要进行回表查询操作
text等)时有时候需要索引很长的字符串这会让索引变得很大查询时浪费大量的磁盘IO影响查询效率此时可以只讲字符串的一部分前缀建立索引这样可以大大节约索引空间从而提高索引效率
可以根据索引的许安则醒来确定而选择性是指不重复的索引值基数和数据表的记录总数的比值索引选择性越高则查询效率越高唯一索引的选择性是1这是最好的索引选择性性能也是最好的
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback