首页 > 其他分享 >使用FORCE INDEX强制使用索引。

使用FORCE INDEX强制使用索引。

时间:2023-12-24 23:04:00浏览次数:34  
标签:INDEX FORCE name create 索引 im file id thumb

优化前

SELECT m.id,m.channel_id,m.sender_id,m.create_at,m.type,m.content,m.file_id,m.create_at ,

u.name,u.nickname,u.online_status,u.avatar_url,u.name_first_letter,

f.name AS file_name,f.extension,f.size,f.mime_typ,f.width,f.height,f.path,f.thumb_width,f.thumb_height

FROM im_message m INNER JOIN t_im_user u

ON m.sender_id=u.id LEFT JOIN im_file f ON m.file_id=f.id

WHERE m.channel_id= 'b9f090a0bf30428da5a9ce7e3e3772ca' AND delete_at=0

and m.create_at <= 1691561693244

ORDER BY m.create_at desc

LIMIT 20



使用explain进行查看sql执行情况如下:


可以看到Extra一栏里面的Using temporary; Using filesort,使用了临时表和filesort排序,当查询数量过多,或者排序没有正确使用索引都会出现Using temporary,导致大量的IO操作严重影响查询性能。

优化查询语句,使用FORCE INDEX强制使用索引。

优化后

SELECT m.id,m.channel_id,m.sender_id,m.create_at,m.type,m.content,m.file_id,m.create_at ,

u.name,u.nickname,u.online_status,u.avatar_url,u.name_first_letter,

f.name AS file_name,f.extension,f.size,f.mime_typ,f.width,f.height,f.path,f.thumb_width,f.thumb_height

FROM im_message m FORCE INDEX(order_index) INNER JOIN t_im_user u

ON m.sender_id=u.id LEFT JOIN im_file f ON m.file_id=f.id

WHERE m.channel_id= 'b9f090a0bf30428da5a9ce7e3e3772ca' AND delete_at=0

and m.create_at <= 1691561693244

ORDER BY m.create_at desc

LIMIT 20

标签:INDEX,FORCE,name,create,索引,im,file,id,thumb
From: https://blog.51cto.com/u_15266301/8957244

相关文章

  • 软件架构原理与实战:设计和实现高性能搜索引擎
    1.背景介绍搜索引擎是现代互联网的核心组成部分,它通过对网页、文档、图片、视频等各种数据进行索引和检索,为用户提供了快速、准确的信息查询服务。随着互联网的迅速发展,搜索引擎的数量和规模也不断增长,成为了互联网的关键基础设施。高性能搜索引擎的设计和实现是一项非常复杂的技术......
  • SQL入门让你的数据库升华为强大的搜索引擎
    作者:禅与计算机程序设计艺术1.背景介绍近年来,基于互联网、移动互联网、社交网络等新型信息传播技术的兴起,以及云计算技术的普及,使得数据量和数据类型不断增长,数据的存储成本越来越低廉,能够承载海量数据的服务器的出现。同时,基于数据分析的搜索引擎的兴起,也使得数据成为搜索的主要输......
  • 强化学习算法真的适合于你的应用吗 —— 强化学习研究方向(研究领域)现有的不足(短板、
    外文原文:WhyYou(Probably)Shouldn’tUseReinforcementLearning地址:https://towardsdatascience.com/why-you-shouldnt-use-reinforcement-learning-163bae193da8中文翻译版本(ChatGPT3.5翻译:)有关这项技术存在很大的炒作,而且理由充分,因为这可能是实现通用人工智能的......
  • CodeForces 1909E Multiple Lamps
    洛谷传送门CF传送门感觉这个题比较难蚌。发现按\(1\simn\)最后可以把\(1\simn\)中的所有平方数点亮。所以\(n\ge20\)就直接输出\(1\simn\)。考虑\(n\le19\)。猜测合法的方案(即按完后亮灯数\(\le\left\lfloor\frac{n}{5}\right\rfloor\)的方案,不考虑\((......
  • CodeForces 1909D Split Plus K
    洛谷传送门CF传送门设最后每个数都相等时为\(t\)。那么一次操作变成了合并两个数\(x,y\),再增加\(x+y-k\)。于是每个\(a_i\)可以被表示成\(b_it-(b_i-1)k\)的形式,化简得\(a_i-k=b_i(t-k)\)。因为\(t-k\)对于每个\(i\)都相同,又因为我们的目标是......
  • CodeForces 1909F2 Small Permutation Problem (Hard Version)
    洛谷传送门CF传送门感觉这个题还是挺不错的。考虑F1。考察\(a_i\)差分后的意义,发现\(a_i-a_{i-1}\)就是\((\sum\limits_{j=1}^{i-1}[p_j=i])+p_i\lei\)。考虑将其转化为棋盘问题。在\((i,p_i)\)放一个车,那么\(a_i-a_{i-1}\)就是\((1,i)\sim......
  • C++:最大值最小值及其索引
    std::max_element和std::min_element 是C++标准库<algorithm>中的函数,可以得到数组和向量(vector)的最值及其索引intcard[6]={1,2,3,4,5,6}intmaxValue=*max_element(card.begin(),card.end());intminValue=*min_element(card.begin(),card.end());intmaxPositi......
  • Codeforces 1900E Transitive Graph
    考虑题目的限制条件:存在$a\tob,b\toc$的边,就会有$a\toc$的边。考虑$p_{1\simk}$,满足这$k$个点按顺序组成了一个环且无重点。那么$p_1\top_2,p_2\top_3$,就有$p_1\top_3$,又有$p_3\top_4$,所以有$p_1\top_4$。以此类推,会发现$\foralli,j\in[1,k],i\not......
  • B+树和索引知识
    B+树概念是一种平衡多路搜索树(BalancedMultiwaySearchTree),常用于数据库和文件系统的索引结构。相比于其他的树型数据结构,如二叉搜索树和B树,B+树在大数据量下的性能表现更优秀。B+树的基本特性:多路搜索树:B+树的每个内部节点可以有多个子节点,通常称为分支因子。典型的分支因......
  • Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)
    C.NumberGame我们考虑那些状态是必胜态我的回合时n为奇数(除1外),直接除以n则必胜下面偶数的情况稍复杂偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态偶数一定含2的因子,\(n=2^k*q,q为奇数\)当\(k=1时如果q\)是一个质数那么只能除一次q这样......