java吧 关注:1,244,866贴子:12,719,342
  • 2回复贴,共1

真实面试题求解析

只看楼主收藏回复

已知test表no➕name加了联合索引
select id from test where no like “%234”and name = xxx
以上sql加force index强制走索引,效率和不走索引,哪个效率更高
某位面试官问的,求原理分析


IP属地:上海来自iPhone客户端1楼2024-03-06 15:54回复
    在一般情况下,通过强制使用索引(使用FORCE INDEX语句)来执行查询可能会导致性能下降,而不是提升。数据库查询优化器通常能够选择最有效的执行计划,并自动选择使用索引或全表扫描,以获得更好的性能。
    在你提供的SQL查询中,涉及到两个条件:no LIKE "%234" 和 name = xxx,并且这两个条件都使用了联合索引。使用索引的决策通常取决于查询的选择性和索引的统计信息。
    原则上来说,如果查询条件中使用的是索引的前缀(比如no LIKE "%234%"),那么索引可能会更有效。但是在这里,no LIKE "%234"并不是索引的前缀,而是在后面添加了通配符%,这样的查询条件可能导致索引的失效,因为无法充分利用索引。
    FORCE INDEX语句的使用可能会绕过优化器的选择,强制使用指定的索引。然而,这并不一定总是更有效,因为优化器通常能够根据实际情况选择更好的执行计划。
    综合考虑,如果你的联合索引是 (no, name),而且查询条件中的 no LIKE "%234" 不是索引的前缀,使用索引可能不会带来性能提升。在这种情况下,最好让优化器自行选择执行计划,而不是使用 FORCE INDEX。
    你可以通过执行计划分析工具(如EXPLAIN语句)来查看数据库优化器选择的执行计划,以便更好地了解查询的性能。


    IP属地:湖北2楼2024-03-06 16:03
    回复
      老哥 你留意下联系方式 我加你


      IP属地:安徽3楼2024-03-06 16:10
      回复