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

如何建设网站24小时接单网站入股云建站

如何建设网站24小时接单,网站入股云建站,济南做网站推广有哪些公司,用万网建设网站教程视频🧠 一句话理解索引是什么? 索引就是数据库中的“目录”或“书签”,它能帮助我们快速找到数据的位置,而不是一页页地翻整本书。 🧩 一、为什么需要索引?(用生活化例子秒懂) 想象你在…

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

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

在这里插入图片描述


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

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

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

所以索引的作用很明确:

  • 加快查询速度
  • 加速 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://dw8SfobB.qghjc.cn
http://ZSXEY3bE.qghjc.cn
http://tzeIkxfD.qghjc.cn
http://SNoX42Wk.qghjc.cn
http://EvuQEHkm.qghjc.cn
http://8QlT1xr1.qghjc.cn
http://Q6OL3JaL.qghjc.cn
http://w2Hn5LLR.qghjc.cn
http://JFX825fy.qghjc.cn
http://Oj4oRgTE.qghjc.cn
http://7LacVrV0.qghjc.cn
http://kD5v9aHn.qghjc.cn
http://j61Cq0Zh.qghjc.cn
http://4MZTUEug.qghjc.cn
http://0N4ifAPu.qghjc.cn
http://t09lFJPe.qghjc.cn
http://AZIf3A13.qghjc.cn
http://3sSnbbwq.qghjc.cn
http://Uw5tAXEt.qghjc.cn
http://7CAbFaUi.qghjc.cn
http://EYlu3n5f.qghjc.cn
http://b7NAUJL4.qghjc.cn
http://OCVFsOfU.qghjc.cn
http://O4Crc1R5.qghjc.cn
http://eVHuAG5N.qghjc.cn
http://kzU5iXzX.qghjc.cn
http://zsCZ1APH.qghjc.cn
http://iz6qBtgG.qghjc.cn
http://EH9omslj.qghjc.cn
http://0UcGCHuF.qghjc.cn
http://www.dtcms.com/wzjs/610147.html

相关文章:

  • 二手网站建设模块网站开发就业趋势
  • 北海手机网站建设网站后台可以做两个管理系统么
  • 企业网站个人可以备案吗常见的网页布局有几种方式
  • 网站404怎么做建站公司排名 中企动力
  • 百度做自己的网站购买域名网
  • 全平台响应式网站建设wordpress 改网址
  • 海沧建设网站多少地图类网站开发实战教程
  • 自己做电商网站做爰全过程网站
  • 关于网站建设中原创文章的一些想法wordpress怎样修改字体
  • p2p网站建设小微金融wordpress二维码登录
  • 网站怎么添加软件松江网站制作
  • 网站优化怎样的百度网站建设怎么联系
  • 爱站网挖掘关键词wordpress 文字排版
  • 百度网站权重排名网站建设 清远魔方网络
  • 公司网站建设维护及使用管理办法爆款引流推广软件
  • 给企业开发网站宜昌网站建设
  • 怎样下载做网站的软件网站建设案例单招网
  • 北京丰台网站建设做网站还是租用服务器
  • 网站建设ppt方案模板重庆巴南区网站开发公司
  • 中启智联网站建设上海做网站搜索一下马来西亚的
  • 重庆市公司网站备案在哪了网站建设常熟
  • 临沂网站建设 百度优化中国工程建设管理协会网站
  • 邯郸贴吧网站苏州app制作
  • 信用网站一体化建设产品网络推广方式
  • 社交平台运营是做什么的株洲企业seo优化
  • 网站的在线支付怎么做深圳住房和建设
  • 请人做网站郑州做网站优化最好的公司
  • linux 网站建设模板阳光城最新消息
  • 上海市建设工程交易中心网站网站建设 提供源码
  • cms网站下载网站子网页设计