当前位置: 首页 > wzjs >正文

靠谱的建站正规公司百色seo快速排名

靠谱的建站正规公司,百色seo快速排名,谷歌优化软件,网页免费下载🧠 一句话理解索引是什么? 索引就是数据库中的“目录”或“书签”,它能帮助我们快速找到数据的位置,而不是一页页地翻整本书。 🧩 一、为什么需要索引?(用生活化例子秒懂) 想象你在…

🧠 一句话理解索引是什么?

索引就是数据库中的“目录”或“书签”,它能帮助我们快速找到数据的位置,而不是一页页地翻整本书。

在这里插入图片描述


🧩 一、为什么需要索引?(用生活化例子秒懂)

想象你在图书馆找一本书中的一个关键词:

  • 没有索引的情况:你只能从第一页一页一页地翻,直到找到关键词(全表扫描)。
  • 有索引的情况:你直接去目录查到页码,快速翻过去(通过索引快速定位)。

所以索引的作用很明确:

  • 加快查询速度
  • 加速 WHERE / JOIN / ORDER BY 等操作
  • 在大数据量下提升性能至关重要

📦 二、索引的分类(面试考察重点)

分类类型说明
按结构划分B+ Tree 索引(最常见)平衡多叉树,查询效率高(MySQL 默认使用)
Hash 索引基于哈希表,等值查询快,不支持范围查找
按字段数划分单列索引针对一个字段创建的索引
复合索引包含多个字段,顺序非常重要(最左前缀原则
按用途划分主键索引主键默认建立的唯一索引
唯一索引保证字段唯一性,如用户名、身份证号等
普通索引仅加速查询,不限制重复
全文索引支持模糊匹配,如搜索引擎关键字匹配(MySQL 5.6+ 支持 InnoDB 全文索引)
空间索引专门用于地理信息查询(GIS 数据)

🚀 三、实际业务中索引的典型应用场景

✅ 场景 1:用户登录

SELECT * FROM user WHERE username = 'zhangsan';

如果 username 上没有索引,数据库会全表扫描,非常慢。添加普通索引即可加速。

✅ 场景 2:订单查询(范围查找)

SELECT * FROM orders WHERE create_time BETWEEN '2023-01-01' AND '2023-01-31';

此类范围查询适合建立 B+ 树索引,因为 B+ 树结构天然支持区间查找。

✅ 场景 3:多字段搜索

SELECT * FROM user WHERE age = 25 AND gender = 'male';

可以考虑建立复合索引 (age, gender),提升多条件过滤的效率。


📐 四、索引的底层原理 —— 为什么是 B+ 树?

B+ Tree 是一种 多路平衡搜索树,它比二叉树更“胖”,查询次数更少。

结构特点:

  • 所有值都存储在叶子节点
  • 所有叶子节点形成链表,方便范围查找
  • 非叶子节点只存储索引键,不存储具体数据

为什么不是 Hash?

特性B+ TreeHash
支持范围查找
有序
支持排序
适合范围、排序、LIKE 前缀查询
适合单值精确匹配一般

所以数据库默认使用 B+ Tree,除非你明确需要 Hash 特性。


🎯 五、最左前缀原则(复合索引的核心)

复合索引只能使用“最左边开始的连续字段”进行查询。

比如创建索引 (a, b, c),下面哪些查询能用上这个索引?

查询条件是否命中索引
WHERE a = 1
WHERE a = 1 AND b = 2
WHERE a = 1 AND b = 2 AND c = 3
WHERE b = 2
WHERE b = 2 AND c = 3
WHERE a = 1 AND c = 3❌(中间断了)

⚠️ 六、常见面试陷阱 + 实战优化建议

1.在索引列上使用函数或表达式:索引可能无法使用,因为 MySQL 无法预先计算出函数或表达式的结果。

例如 where 后用了函数:

WHERE DATE(create_time) = '2023-04-10';

这会让索引失效,应该改为:

WHERE create_time BETWEEN '2023-04-10 00:00:00' AND '2023-04-10 23:59:59';

2. 使用 LIKE 语句,但通配符在前面:以“%”或者“ _ ”开头,索引也无法使用。

例如使用 %like 造成索引失效

WHERE name LIKE '%张'

会导致全表扫描,建议改为全文索引或前缀匹配:

WHERE name LIKE '张%'

3. 尽量避免在查询中使用 OROR 会让数据库执行计划难以只利用一个索引,而不得不回退到全表扫描或合并多索引结果。

为什么避免查询中使用 OR?举个例子:假设你要找“身高是180cm 或 体重是60kg”的人:
身高你有排序好的名单(索引)
体重你也有排序好的名单(另一个索引)
但你要满足“其中一个就行”,你就得:
分别查两个名单
再合并结果
再去重
对数据库来说,这个合并过程代价更大,不一定比全表扫描快,所以很多时候它会干脆放弃用索引。

例如:

SELECT * FROM table_name WHERE a = 1 OR b = 2

可能导致两个字段的索引都失效,建议拆成 UNION 查询。

SELECT * FROM table_name WHERE a = 1
UNION
SELECT * FROM table_name WHERE b = 2;

4. 使用不等于(<>)或 NOT 操作符:会导致索引失效,执行全表扫描。

例如:

WHERE age <> 30

WHERE NOT (status = 'active')

因为不等于或否定条件难以利用索引结构(如 B+ 树的有序性),数据库通常会选择放弃索引、执行全表扫描,以确保结果完整。

优化建议:

  • 若必须使用不等或 NOT 条件,考虑是否可以用范围、逻辑重写或将频率高的正向条件抽出,提升索引利用率;
WHERE age < 30 OR age > 30
  • 也可配合 覆盖索引位图索引(特定数据库支持) 做优化(例如 Oracle)。

5. 不满足联合索引的最左前缀原则:索引无法生效。

例如有如下联合索引:

INDEX idx_user_name_age (name, age)

以下语句中:

SELECT * FROM users WHERE age = 25;

没有使用 name 字段,因此无法命中联合索引 idx_user_name_age

📌 最左前缀原则:联合索引必须从最左边的字段开始连续使用,才能命中索引。

优化建议:

  • 改写 SQL,使用包含最左字段的条件:
    SELECT * FROM users WHERE name = '张三' AND age = 25;
    
  • 或者为 age 字段单独创建索引。
    SELECT * FROM users WHERE name = '张三' ;
    

📈 七、索引优化建议总结

1、选择合适的列作为索引

  • 经常作为查询条件(WHERE 子句)、排序条件(ORDER BY 子句)、分组条件(GROUP BY 子句)的列是建立索引的好选项。
  • 区分度高(即唯一值较多,如 ID、邮箱),如 手机号身份证号
  • 频繁更新 的字段不适合创建索引(索引需要维护,会影响写入性能)。

2、避免过多的索引

  • 因为每个索引都需要占用额外的磁盘空间
  • 更新表(INSERT、UPDATE、DELETE 操作)的时候,索引都需要被更新

3、利用前缀索引和索引列的顺序

  • 对于字符串类型的列,可以考虑使用前缀索引来减少索引大小。
  • 在创建联合索引时,如 (name,age), 应该根据查询条件将最常用的放在前面,遵守最左前缀原则。
建议说明
只给高频查询字段加索引避免冗余索引
使用复合索引替代多个单列索引能大幅提升查询效率
保持索引字段的选择性高选择性高 = 唯一值多,过滤效果好
定期分析慢查询日志判断是否需要建立新索引
删除不再使用或重复的索引减少写入负担

📊 额外加餐:索引与事务的关系(关联知识)

  • 索引可以加速事务中的查询与更新
  • 过多索引会增加事务写入时的锁开销
  • 在使用 RR(可重复读)隔离级别时,InnoDB 会使用 间隙锁(gap lock),而索引设计会直接影响锁粒度和性能

✅ 总结一句话:

索引设计,是数据库性能优化的第一战线。用好了像火箭,用错了像拖拉机。

http://www.dtcms.com/wzjs/7327.html

相关文章:

  • 网络教学网站建设百度手机关键词排名工具
  • 大连做网站公司排行榜seo综合查询
  • 一分钟建站快速提升网站关键词排名
  • 响应式网站排名推广平台
  • wordpress模板怎么改织梦seo推广优化外包价格
  • 网站运营商查询宁波seo网页怎么优化
  • 企业网站建设需求调查中文搜索引擎网站
  • 形容网站做的好处福鼎网站优化公司
  • 做网站素材图片seo规则
  • 郑州网站建设汉狮金融网站推广圳seo公司
  • wordpress微信支付seo诊断报告
  • 一条龙网站建设哪家专业现在怎么做网络推广
  • sae wordpress 安装主题seo教程技术整站优化
  • 软装设计公司简介360优化大师官方下载最新版
  • 网站怎么做区域性优化百度总部电话
  • 网站开发步骤规划搜索引擎优化宝典
  • 做分色找工作网站保定百度推广联系电话
  • 网站托管流程搜seo
  • 上市企业网站建设广州网站外包
  • 网站要备案吗怎么做网络营销平台
  • 网站开发 免代码谷歌关键词搜索量数据查询
  • 建设网站需要哪些资质保定网站制作
  • 电商网站的付款功能自媒体营销推广方案
  • 网站开发意见书全球网站排名
  • 网站建设 三门峡查询网域名查询
  • 网站建设维护与网页设计网站关键词排名优化推广软件
  • 长沙做营销型网站公司seo流量优化
  • 思科中国网站开发案例市场营销的八个理论
  • 茶百道加盟费大概要多少鹤壁seo
  • 网站开发的进度控制计划表网站优化排名软件哪些最好