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

PHP面试题——情景应用

一、优化语句查询

test表中数据有500w,字段有id/t_id/type_id/plat_id,语句为select max(t_id) from test where type_id=1 and plat_id=1

考察mysql语句优化,这里主要是优化max函数,max函数会导致全表扫描,效率会很低,可以使用order by加limit进行优化

select t_id from test where type_id=1 and plat_id=1 order by t_id desc limit 1;

还可以使用加索引进一步优化速度,给t_id加索引,还有(type_id/plat_id)联合索引。

二、写条语句从user 表随机调取 1 条数据?

select * from user order by rand() limit 1;
使用 RAND() 函数对结果集进行随机排序。

三、如何排查和优化查询比较慢的sql语句?

  1. 使用MySQL 的慢查询日志

  2. 通过explain 可以查看一条SQL使用哪些索引和有什么使用临时表
    关注以下字段:
    type:访问类型,如 ALL、index、range 等。
    key:使用的索引名称。
    rows:估计的行数。
    Extra:其他信息,如是否使用了临时表、文件排序等。

  3. 优化查询语句本身和添加索引

    • 仅选择需要的字段,避免使用 SELECT *。
    • 确保 WHERE 条件中使用了索引列。
    • 避免在索引列上使用函数或运算符,这会阻止索引的使用。
    • 根据查询的 WHERE 条件和连接条件添加索引。
    • 过多或不必要的索引会增加写操作的开销,影响性能。
  4. 对于不经常变化且查询频繁的数据,可以考虑使用缓存,如 Memcached、Redis 等。

四、mysql数据库索引有哪些?什么情况下不适合建立索引?

  1. 主键索引(Primary Key)
    主键索引是唯一标识每条记录的索引,确保表中每行数据都有唯一的标识。
    一个表只能有一个主键索引,通常是在主键字段上创建的。
  2. 唯一索引(Unique Index)
    唯一索引确保索引列中的所有值都是唯一的,但允许存在空值(NULL)。
    一个表可以有多个唯一索引,可以用来确保列或组合列的唯一性。
  3. 普通索引(Normal Index)
    普通索引是最基本的索引类型,用于加快对列的查询速度。
    可以对表中的任意列创建普通索引。
  4. 全文索引(Full-Text Index)
    全文索引用于在文本数据中进行全文搜索,例如文章内容或文档。
    可以对 CHAR、VARCHAR 或 TEXT 类型的列创建全文索引。
  5. 组合索引(Composite Index)
    组合索引是包含多个列的索引,用于加快联合条件的查询。
    查询时可以利用索引覆盖多个查询条件。
  6. 空间索引(Spatial Index)
    空间索引用于优化空间数据类型的查询,例如地理位置信息。
    可以用于 GEOMETRY、POINT、LINESTRING 等空间数据类型的列。

对于经常用作 WHERE 子句中的查询条件、ORDER BY 进行排序、JOIN 操作中连接的列,通过索引可以加快连接操作的速度。
不适合建立索引的情况:

  • 低基数的列:基数(Cardinality)指的是列中不同值的数量。如果列中的值几乎全部相同,建立索引的效果会很小。

  • 频繁更新的列:对于频繁更新的列(特别是使用 UPDATE 和 DELETE 操作的列),索引可能会增加维护成本,并且在插入新记录时可能会影响性能。

  • 小表:对于行数很少的表,查询速度本身已经很快,额外的索引可能不会带来显著的性能提升,反而增加了存储和维护成本。

  • 不会用到的列:如果某列很少用作查询条件,或者几乎不会出现在 WHERE 子句中,建立索引可能没有意义。

  • 文本/图像类型的列:对于 TEXT、BLOB 等大字段类型,通常不适合建立索引,可以考虑使用全文索引或者其他技术来优化查询。

五、缓存穿透、缓存雪崩、缓存击穿的区别以及对应的解决方案?

  1. 缓存穿透(Cache Penetration)

    问题描述:
    缓存穿透指的是恶意或非法访问请求查询一个不存在的缓存数据,导致该查询请求绕过缓存直接访问数据库,从而引起数据库的压力增大。

    解决方案:

    • 缓存空对象(Cache Null Object):对于不存在的数据,也将其缓存起来,设置一个较短的过期时间,防止恶意请求多次访问。
  2. 缓存雪崩(Cache Avalanche)

    问题描述:
    缓存雪崩指的是缓存中大量的缓存数据同时过期失效,导致大量的请求直接访问数据库,从而造成数据库压力剧增,甚至引发系统崩溃。

    解决方案:

    • 缓存失效时间随机化:设置缓存的失效时间随机分布,避免大量缓存同时过期。
    • 分布式锁:在缓存失效时,使用分布式锁控制同时只有一个请求更新缓存,避免缓存失效
http://www.dtcms.com/a/508041.html

相关文章:

  • 看门狗设置
  • 部门网站建设总结网上商城网站建设
  • 做网站服务器哪种好外贸企业网站推广方案
  • 合肥企业网站推广英文网站建设情况
  • MVVM 架构 android
  • 数据结构8:栈
  • 激活函数只是“非线性开关“?ReLU、Sigmoid、Leaky ReLU的区别与选择
  • C# 基础——多态的实现方式
  • 【Nginx反向代理技术详解】原理、配置与实践
  • 福州企业网站维护价格低网站建设人员的安排
  • icon图标素材下载网站网络营销推广策划的步骤
  • ObjectId objectId = gridFSTemplate.store(fileInputStream, “文件轮播对象“, ““)
  • SpringBoot的actuator组件快速使用
  • STM32学习(MCU控制)(GPIO)
  • wordpress站点标题添加如何注册一个自己的公司
  • 台州企业网站搭建价格网站开发的交付文档
  • 橙色守护者:嘉顺达蓝海的危险品运输安全密码
  • 安全监控摄像头通过智能组网模块实现联网报警和远程管理的实践解析
  • AI时代的数据管理新范式:Git for Data让数据工程化
  • Linux中内核调用用户空间程序的实现
  • 建网站空间的详细说明网站备案怎么查询
  • 2025 兽用 mRNA 疫苗市场调研:58.7% CAGR 下,技术路线与投资前景深度分析
  • 关于 Qt5.x版本离线安装可以跳过登录但是实际离线仍需要登录 的解决方法
  • 什么时候会出现电源平面谐振?
  • php做网站常见实例新市网站建设
  • 【Vue知识点总结】style标签的 scoped 属性
  • 网站移动适配怎么做济南做网站互联网公司排名
  • authui!CLogonFrame::Create中的USER32!LoadImageW可以作为有效起始断点
  • Linux服务器编程实践50-TCP接收与发送缓冲区:SO_RCVBUF与SO_SNDBUF设置
  • 免费无版权图片素材网站中国制造网简介