欢迎光临
我们一直在努力

MySQL删除not in语句使用方法 (删除数据库中 not in的使用)

MySQL是一个开源的关系型数据库管理系统,广泛应用于各种应用场景中。在使用MySQL时,我们经常需要删除一些数据,而其中not in语句是一个非常有用的工具,可以帮助我们快速、方便地删除无用的数据。本文将为你详细介绍MySQL删除not in语句的使用方法。

一、not in语句的定义

not in语句是MySQL中的一种条件语句,用于指定SQL查询时返回值中不包含某些值。

语法格式如下:

“` SQL

SELECT column_name(s)

FROM table_name

WHERE column_name NOT IN (value1, value2, …);

“`

其中column_name指需要查询的列,table_name指需要查询的表,NOT IN表示返回不包含括号中指定值的所有行。

二、not in语句的使用场景

not in语句可以应用于各种场景,例如:

1. 待删除的数据不在指定范围内:可以使用not in语句对需要删除的数据进行筛选,只保留在指定范围外的数据。

2. 删除或更新表中的指定行:使用not in语句可以准确地删除或更新表中的指定行。

3. 数据库优化:使用not in语句可以优化数据库查询效率,减少不必要的数据加载和运算量。

以下将分别介绍not in语句在这些场景中的使用方法。

三、删除指定范围外的数据

在进行数据清理时,有时需要删除数据库中不在指定范围内的数据。例如,删除所有不在“用户ID在1到100之间”的用户数据。

使用not in语句可以轻松实现这个目标,具体代码如下:

“` SQL

DELETE FROM users

WHERE user_id NOT IN (1,2,3,4,….100);

“`

其中users是需要删除的表,user_id是需要删除的数据列。通过将需要删除的数据ID列的ID值都列出,并将not in语句用于where条件中,可以实现只删除不在指定范围内的数据的效果。

四、删除指定行

不仅可以删除指定范围外的数据,还可以使用not in语句准确地删除表中某些行。例如,想要删除users表中最近一年没有登录的用户数据。

使用not in语句可以轻松实现这个目标,具体代码如下:

“` SQL

DELETE FROM users

WHERE user_id NOT IN (

SELECT user_id

FROM user_login_history

WHERE login_time > DATE_SUB(NOW(), INTERVAL 1 YEAR)

);

“`

其中users是需要删除的表,user_id是需要删除的数据列,user_login_history是需要用来比较的表。通过将需要用到的表中的字段都放入IN子句中,可以实现只删除满足条件的数据的效果。

五、数据库优化

在进行大型数据库操作时,查询速度可能会变慢。这时,可以使用not in语句对查询速度进行优化。例如,在进行数据清理时,要删除不在指定范围内的大量数据。这种情况下,如果一条一条地删除数据,可能会十分耗时。

使用not in语句可以大幅度提升操作效率。具体代码如下:

“` SQL

DELETE FROM users

WHERE user_id NOT IN (

SELECT user_id

FROM users_temp

);

“`

其中users是需要删除的表,user_id是需要删除的数据列,users_temp是查询需要用到的表。与以上例子类似,通过将需要查询的表中的字段都放入IN子句中,可以实现快速、准确地删除满足条件的数据的效果。

六、

本文为你详细介绍了MySQL删除not in语句的使用方法。在实际操作中,需要根据具体的情况选择不同的场景和方法。在进行数据清理、性能优化等操作时,not in语句是一个非常有用的工具。通过灵活运用not in语句,可以轻松实现满足特定条件的数据删除、更新等操作,从而提高MySQL数据库管理效率,帮助你更好地处理各种数据库问题。

相关问题拓展阅读:

  • SQL语句删除重复的记录
  • 如何删除数据库中A表和B表中的重复数值

SQL语句删除重复的记录

COL1 中有重复记录(COL1,COL2为主键),如何删除

1、有少数重复记录(在col1,col2上有索引比较好)

DELETE T

WHERE (COL1,COL2) IN

(SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)

AND

ROWID NOT IN

(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)

2、大部份记录有重复记录

DELETE T WHERE ROWID NOT IN

(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2)

3、其他写法

DELETE T WHERE ROWID IN

(SELECT A.ROWID FROM T A,T B

WHERE A.COL1=B.COL1 AND A.COL2 = B.COL2 AND A.ROWID > B.ROWID)

######################################

10. 删除重复记录

更高效的删除重复记录方法 ( 因为使用了ROWID)

DELETE FROM EMP E

WHERE E.ROWID > (SELECT MIN(X.ROWID)

FROM EMP X

WHERE X.EMP_NO = E.EMP_NO);

11. 用TRUNCATE替代DELETE

当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是

恢复到执行删除命令之前的状况)

而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.

(译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)

12. 尽量多使用COMMIT

只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:

COMMIT所释放的资源:

a. 回滚段上用于恢复数据的信息.

b. 被程序语句获得的锁

c. redo log buffer 中的空间

d. ORACLE为管理上述3种资源中的内部花费

删除重复的数据

delete from tb where id not in (

select id from

(select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a

)

现在完成了重复数据的删除,主要是利用了找出某个分组中更大的那个id,其中包括了所有不重复的id,然后使用not in将需要保留的排除。

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people where peopleName in (select peopleName from people group by peopleName having count(peopleName) > 1) and peopleId not in (select min(peopleId) from people group by peopleName having count(peopleName)>1)

3、查找表中多余的重复记录(多个字段)

select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

6.消除一个字段的左边的之一位:

update tableName set =Right(<title>,(len(<title>)-1)) where Title like ‘村%’</p> <p><p> 7.消除一个字段的右边的之一位:</p> <p> update tableName set <title>=left(<title>,(len(<title>)-1)) where Title like ‘%村’</p> <p><p> 8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录 </p> <h3 id="如何删除数据库中A表和B表中的重复数值">如何删除数据库中A表和B表中的重复数值</h3> <p>去掉重复值计数的三种方法判猜,函数搏冲悄法、基渣删除重复值法、透视表法,各种方法均有讲解,可以择优使用。</p> <p>可以写个过程;</p> <p>先找出 A,B表中重复数据的id,然后旅芦核在根据id,分别把A,B表哗庆中相应数据删除 oracle中可以用拆掘游标处理</p> <p>关于删除数据库中 not in的使用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。</p> </article> <div class="post-actions"> <a href="javascript:;" etap="like" class="post-like action action-like" data-pid="616153"><i class="tbfa"></i>赞(<span>0</span>)</a> </div> <div class="post-copyright-custom">【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。</div> <div class="shares"><dfn>分享到</dfn><a href="javascript:;" data-url="https://www.27ka.cn/616153.html" class="share-weixin" title="分享到微信"><i class="tbfa"></i></a><a etap="share" data-share="weibo" class="share-tsina" title="分享到微博"><i class="tbfa"></i></a><a etap="share" data-share="qq" class="share-sqq" title="分享到QQ好友"><i class="tbfa"></i></a><a etap="share" data-share="qzone" class="share-qzone" title="分享到QQ空间"><i class="tbfa"></i></a><a etap="share" data-share="line" class="share-line" title="分享到Line"><i class="tbfa"></i></a><a etap="share" data-share="twitter" class="share-twitter" title="分享到X"><i class="tbfa"></i></a><a etap="share" data-share="facebook" class="share-facebook" title="分享到Facebook"><i class="tbfa"></i></a><a etap="share" data-share="telegram" class="share-telegram" title="分享到Telegram"><i class="tbfa"></i></a><a etap="share" data-share="skype" class="share-skype" title="分享到Skype"><i class="tbfa"></i></a></div> <div class="article-tags"></div> <nav class="article-nav"> <span class="article-nav-prev">上一篇<br><a href="https://www.27ka.cn/616152.html" rel="prev">CSS滚动条显示与滚动条隐藏的方法</a></span> <span class="article-nav-next">下一篇<br><a href="https://www.27ka.cn/616154.html" rel="next">html怎么设置div边框样式css布局</a></span> </nav> <div class="relates relates-textcol2"><div class="title"><h3>相关推荐</h3></div><ul><li><a href="https://www.27ka.cn/616156.html">SQL Server数据库之触发器:定义、使用与管理 (sql server 数据库触发器)</a></li><li><a href="https://www.27ka.cn/616151.html">保证数据安全,nuix数据库远程访问的正确姿势 (nuix数据库远程访问)</a></li><li><a href="https://www.27ka.cn/616149.html">什么是Access数据库主键及其设置依据 (access数据库设为主键的依据)</a></li><li><a href="https://www.27ka.cn/616147.html">赫斌数据库:数据管理新时代 (赫斌数据库)</a></li><li><a href="https://www.27ka.cn/616146.html">数据库工作要求的技能与知识 (数据库工作需要掌握什么)</a></li><li><a href="https://www.27ka.cn/616144.html">如何判断SQL数据库类型是否为空? (sql数据库类型是否为空)</a></li><li><a href="https://www.27ka.cn/616142.html">实用图数据库:免费 pdf下载指南 (图数据库 pdf下载)</a></li><li><a href="https://www.27ka.cn/616140.html">Delphi编程实现自动定时监测数据库更新 (delphi定时查看数据库)</a></li></ul></div> </div> </div> <div class="sidebar"> <div class="widget-on-phone widget widget_ui_orbui"><div class="item"><a href="https://www.sukeyun.com/" target="_blank"><img src="https://www.27ka.cn/wp-content/uploads/2024/09/A0E13A9F04.png"></a></div></div><div class="widget-on-phone widget widget_ui_posts"><h3>热门推荐</h3><ul><li><a target="_blank" href="https://www.27ka.cn/9161.html"><span class="thumbnail"><img data-src="https://www.27ka.cn/wp-content/uploads/2022/12/2020014124124.webp" alt="云搜网推荐“原生IP”原生静态住宅IP、原生家庭IP、原生传媒IP、解锁tiktok、Netflix、多个游戏等商家平台-云搜网" src="https://www.27ka.cn/wp-content/themes/dux/assets/img/thumbnail.png" class="thumb"></span><span class="text">云搜网推荐“原生IP”原生静态住宅IP、原生家庭IP、原生传媒IP、解锁tiktok、Netflix、多个游戏等商家平台</span><span class="muted">2022-12-04</span></a></li><li><a target="_blank" href="https://www.27ka.cn/4986.html"><span class="thumbnail"><img data-src="https://www.27ka.cn/wp-content/uploads/2022/05/2022052520161-1.png" alt="云搜网推荐“站群服务器”VPS站群服务器的商家列表-云搜网" src="https://www.27ka.cn/wp-content/themes/dux/assets/img/thumbnail.png" class="thumb"></span><span class="text">云搜网推荐“站群服务器”VPS站群服务器的商家列表</span><span class="muted">2022-05-25</span></a></li><li><a target="_blank" href="https://www.27ka.cn/4980.html"><span class="thumbnail"><img data-src="https://www.27ka.cn/wp-content/uploads/2022/05/2022052520081-1.png" alt="云搜网推荐“外贸”VPS和服务器的商家列表,全球CN2网络-云搜网" src="https://www.27ka.cn/wp-content/themes/dux/assets/img/thumbnail.png" class="thumb"></span><span class="text">云搜网推荐“外贸”VPS和服务器的商家列表,全球CN2网络</span><span class="muted">2022-05-25</span></a></li><li><a target="_blank" href="https://www.27ka.cn/4992.html"><span class="thumbnail"><img data-src="https://www.27ka.cn/wp-content/uploads/2022/05/2022052520291.png" alt="云搜网推荐海外“服务器”租用推荐:便宜好用、优化线路!-云搜网" src="https://www.27ka.cn/wp-content/themes/dux/assets/img/thumbnail.png" class="thumb"></span><span class="text">云搜网推荐海外“服务器”租用推荐:便宜好用、优化线路!</span><span class="muted">2022-05-25</span></a></li><li><a target="_blank" href="https://www.27ka.cn/4971.html"><span class="thumbnail"><img data-src="https://www.27ka.cn/wp-content/uploads/2022/05/2022052519452.png" alt="云搜网推荐国外VPS,精挑细选“最便宜VPS”,便宜还“靠谱”-云搜网" src="https://www.27ka.cn/wp-content/themes/dux/assets/img/thumbnail.png" class="thumb"></span><span class="text">云搜网推荐国外VPS,精挑细选“最便宜VPS”,便宜还“靠谱”</span><span class="muted">2022-05-25</span></a></li></ul></div><div class="widget-on-phone widget widget_ui_orbui"><div class="item"><h3>分类目录</h3> <div class="tbcm-newtags"> <a href="https://www.27ka.cn/tag/香港vps">香港VPS</a> <a href="https://www.27ka.cn/tag/欧洲vps">欧洲VPS</a> <a href="https://www.27ka.cn/tag/日本vps">日本VPS</a> <a href="https://www.27ka.cn/tag/印尼vps">印尼VPS</a> <a href="https://www.27ka.cn/tag/外贸vps">外贸VPS</a> <a href="https://www.27ka.cn/tag/美国vps">美国VPS</a> <a href="https://www.27ka.cn/tag/迪拜vps">迪拜VPS</a> <a href="https://www.27ka.cn/tag/德国vps">德国VPS</a> <a href="https://www.27ka.cn/tag/韩国vps">韩国VPS</a> <a href="https://www.27ka.cn/tag/便宜vps">便宜VPS</a> <a href="https://www.27ka.cn/tag/英国vps">英国VPS</a> <a href="https://www.27ka.cn/tag/荷兰vps">荷兰VPS</a> <a href="https://www.27ka.cn/tag/南非vps">南非VPS</a> <a href="https://www.27ka.cn/tag/印度vps">印度VPS</a> <a href="https://www.27ka.cn/tag/越南vps">越南VPS</a> <a href="https://www.27ka.cn/tag/法国vps">法国VPS</a> <a href="https://www.27ka.cn/tag/埃及vps">埃及VPS</a> <a href="https://www.27ka.cn/tag/巴林vps">巴林VPS</a> <a href="https://www.27ka.cn/tag/波兰vps">波兰VPS</a> <a href="https://www.27ka.cn/tag/巴西vps">巴西VPS</a> <a href="https://www.27ka.cn/tag/台湾vps">台湾VPS</a> <a href="https://www.27ka.cn/tag/纽约vps">纽约VPS</a> <a href="https://www.27ka.cn/tag/高防vps">高防VPS</a> <a href="https://www.27ka.cn/tag/西雅图vps">西雅图VPS</a> <a href="https://www.27ka.cn/tag/圣何塞vps">圣何塞VPS</a> <a href="https://www.27ka.cn/tag/芝加哥vps">芝加哥VPS</a> <a href="https://www.27ka.cn/tag/达拉斯vps">达拉斯VPS</a> <a href="https://www.27ka.cn/tag/土耳其vps">土耳其VPS</a> <a href="https://www.27ka.cn/tag/新加坡vps">新加坡VPS</a> <a href="https://www.27ka.cn/tag/菲律宾vps">菲律宾VPS</a> <a href="https://www.27ka.cn/tag/俄罗斯vps">俄罗斯VPS</a> <a href="https://www.27ka.cn/tag/柬埔寨vps">柬埔寨VPS</a> <a href="https://www.27ka.cn/tag/搬瓦工vps">搬瓦工VPS</a> <a href="https://www.27ka.cn/tag/大硬盘vps">大硬盘VPS</a> <a href="https://www.27ka.cn/tag/卢森堡vps">卢森堡VPS</a> <a href="https://www.27ka.cn/tag/孟加拉国vps">孟加拉国VPS</a> <a href="https://www.27ka.cn/tag/澳大利亚vps">澳大利亚VPS</a> <a href="https://www.27ka.cn/tag/保加利亚vps">保加利亚VPS</a> <a href="https://www.27ka.cn/tag/马来西亚vps">马来西亚VPS</a> <a href="https://www.27ka.cn/tag/印度尼西亚vps">印度尼西亚VPS</a> <a href="https://www.27ka.cn/tag/沙特阿拉伯vps">沙特阿拉伯VPS</a> <a href="https://www.27ka.cn/tag/CDN">CDN</a> <a href="https://www.27ka.cn/tag/高防cdn">高防CDN</a> <a href="https://www.27ka.cn/tag/云服务器">云服务器</a> <a href="https://www.27ka.cn/tag/香港服务器">香港服务器</a> <a href="https://www.27ka.cn/tag/日本服务器">日本服务器</a> <a href="https://www.27ka.cn/tag/欧洲服务器">欧洲服务器</a> <a href="https://www.27ka.cn/tag/美国服务器">美国服务器</a> <a href="https://www.27ka.cn/tag/德国服务器">德国服务器</a> <a href="https://www.27ka.cn/tag/韩国服务器">韩国服务器</a> <a href="https://www.27ka.cn/tag/英国服务器">英国服务器</a> <a href="https://www.27ka.cn/tag/荷兰服务器">荷兰服务器</a> <a href="https://www.27ka.cn/tag/南非服务器">南非服务器</a> <a href="https://www.27ka.cn/tag/外贸服务器">外贸服务器</a> <a href="https://www.27ka.cn/tag/印度服务器">印度服务器</a> <a href="https://www.27ka.cn/tag/非洲服务器">非洲服务器</a> <a href="https://www.27ka.cn/tag/站群服务器">站群服务器</a> <a href="https://www.27ka.cn/tag/越南服务器">越南服务器</a> <a href="https://www.27ka.cn/tag/台湾服务器">台湾服务器</a> <a href="https://www.27ka.cn/tag/高防服务器">高防服务器</a> <a href="https://www.27ka.cn/tag/新加坡服务器">新加坡服务器</a> <a href="https://www.27ka.cn/tag/菲律宾服务器">菲律宾服务器</a> <a href="https://www.27ka.cn/tag/俄罗斯服务器">俄罗斯服务器</a> </div></div></div></div></section> <footer class="footer"> <div class="container"> <p>© 2014-2025   <a href="https://www.27ka.cn">云搜网</a>   <a href="https://www.27ka.cn/go/beianmiit" rel="external nofollow" target="_blank"> 鄂ICP备2021015104号-2 </a> </script> <a href="https://www.27ka.cn/sitemap.xml"> SiteMap </a> </br> </br> </script></span><strong><span style="color: #ff0000;">本站不销售产品、不代购、不提供技术支持,仅分享信息,请遵纪守法、文明上网。</span></strong></a></p> <script type="pmdelayedscript" data-cfasync="false" data-no-optimize="1" data-no-defer="1" data-no-minify="1" data-rocketlazyloadscript="1"> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?c8bb186265646432de4e37fc15f8494d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </div> </footer> <script>window.TBUI={"www":"https:\/\/www.27ka.cn","uri":"https:\/\/www.27ka.cn\/wp-content\/themes\/dux","ajaxurl":"https:\/\/www.27ka.cn\/wp-admin\/admin-ajax.php","ver":"9.1","roll":"1 2","copyoff":0,"ajaxpager":"0","fullimage":"1","captcha":0,"captcha_comment":0,"captcha_login":1,"captcha_register":1,"table_scroll_m":1,"table_scroll_w":"800","pre_color":1,"pre_copy":1,"lang":{"copy":"\u590d\u5236","copy_success":"\u5df2\u590d\u5236","comment_loading":"\u8bc4\u8bba\u63d0\u4ea4\u4e2d...","comment_cancel_edit":"\u53d6\u6d88\u7f16\u8f91","loadmore":"\u52a0\u8f7d\u66f4\u591a","like_login":"\u70b9\u8d5e\u8bf7\u5148\u767b\u5f55","liked":"\u4f60\u5df2\u8d5e\uff01","delete_post":"\u786e\u5b9a\u5220\u9664\u8fd9\u4e2a\u6587\u7ae0\u5417\uff1f","read_post_all":"\u70b9\u51fb\u9605\u8bfb\u4f59\u4e0b\u5168\u6587","copy_wechat":"\u5fae\u4fe1\u53f7\u5df2\u590d\u5236","sign_password_less":"\u5bc6\u7801\u592a\u77ed\uff0c\u81f3\u5c116\u4f4d","sign_username_none":"\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a","sign_email_error":"\u90ae\u7bb1\u683c\u5f0f\u9519\u8bef","sign_vcode_loading":"\u9a8c\u8bc1\u7801\u83b7\u53d6\u4e2d","sign_vcode_new":" \u79d2\u91cd\u65b0\u83b7\u53d6"},"turnstile_key":""}</script> <!-- Lasso tracking events - Performance --> <script type="text/javascript" src="https://js.lasso.link/lasso-performance.min.js?ver=131.20250421" defer></script> <script type="text/javascript" defer> document.addEventListener("lassoTrackingEventLoaded", function(e) { e.detail.init({ 'lsid': 'ls-tokdbcq53vucgebdien9h3vgkj', 'pid': '616153', 'ipa': '', 'performance': '1', 'matching': '1', }); }); </script> <script type="text/javascript" src="https://www.27ka.cn/wp-content/themes/dux/assets/js/libs/jquery.min.js?ver=9.1" id="jquery-js"></script> <script data-minify="1" type="text/javascript" src="https://www.27ka.cn/wp-content/cache/min/1/wp-content/themes/dux/assets/js/loader.js?ver=1679672520" id="loader-js"></script> <script id="perfmatters-delayed-scripts-js">const pmDelayClick=false;const pmDelayTimer=setTimeout(pmTriggerDOMListener,10*1000);const pmUserInteractions=["keydown","mousedown","mousemove","wheel","touchmove","touchstart","touchend"],pmDelayedScripts={normal:[],defer:[],async:[]},jQueriesArray=[],pmInterceptedClicks=[];var pmDOMLoaded=!1,pmClickTarget="";function pmTriggerDOMListener(){"undefined"!=typeof pmDelayTimer&&clearTimeout(pmDelayTimer),pmUserInteractions.forEach(function(e){window.removeEventListener(e,pmTriggerDOMListener,{passive:!0})}),document.removeEventListener("visibilitychange",pmTriggerDOMListener),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",pmTriggerDelayedScripts):pmTriggerDelayedScripts()}async function pmTriggerDelayedScripts(){pmDelayEventListeners(),pmDelayJQueryReady(),pmProcessDocumentWrite(),pmSortDelayedScripts(),pmPreloadDelayedScripts(),await pmLoadDelayedScripts(pmDelayedScripts.normal),await pmLoadDelayedScripts(pmDelayedScripts.defer),await pmLoadDelayedScripts(pmDelayedScripts.async),await pmTriggerEventListeners(),document.querySelectorAll("link[data-pmdelayedstyle]").forEach(function(e){e.setAttribute("href",e.getAttribute("data-pmdelayedstyle"))}),window.dispatchEvent(new Event("perfmatters-allScriptsLoaded")),pmWaitForPendingClicks().then(()=>{pmReplayClicks()})}function pmDelayEventListeners(){let e={};function t(t,n){function r(n){return e[t].delayedEvents.indexOf(n)>=0?"perfmatters-"+n:n}e[t]||(e[t]={originalFunctions:{add:t.addEventListener,remove:t.removeEventListener},delayedEvents:[]},t.addEventListener=function(){arguments[0]=r(arguments[0]),e[t].originalFunctions.add.apply(t,arguments)},t.removeEventListener=function(){arguments[0]=r(arguments[0]),e[t].originalFunctions.remove.apply(t,arguments)}),e[t].delayedEvents.push(n)}function n(e,t){let n=e[t];Object.defineProperty(e,t,{get:n||function(){},set:function(n){e["perfmatters"+t]=n}})}t(document,"DOMContentLoaded"),t(window,"DOMContentLoaded"),t(window,"load"),t(window,"pageshow"),t(document,"readystatechange"),n(document,"onreadystatechange"),n(window,"onload"),n(window,"onpageshow")}function pmDelayJQueryReady(){let e=window.jQuery;Object.defineProperty(window,"jQuery",{get:()=>e,set(t){if(t&&t.fn&&!jQueriesArray.includes(t)){t.fn.ready=t.fn.init.prototype.ready=function(e){pmDOMLoaded?e.bind(document)(t):document.addEventListener("perfmatters-DOMContentLoaded",function(){e.bind(document)(t)})};let n=t.fn.on;t.fn.on=t.fn.init.prototype.on=function(){if(this[0]===window){function e(e){return e=(e=(e=e.split(" ")).map(function(e){return"load"===e||0===e.indexOf("load.")?"perfmatters-jquery-load":e})).join(" ")}"string"==typeof arguments[0]||arguments[0]instanceof String?arguments[0]=e(arguments[0]):"object"==typeof arguments[0]&&Object.keys(arguments[0]).forEach(function(t){delete Object.assign(arguments[0],{[e(t)]:arguments[0][t]})[t]})}return n.apply(this,arguments),this},jQueriesArray.push(t)}e=t}})}function pmProcessDocumentWrite(){let e=new Map;document.write=document.writeln=function(t){var n=document.currentScript,r=document.createRange();let a=e.get(n);void 0===a&&(a=n.nextSibling,e.set(n,a));var i=document.createDocumentFragment();r.setStart(i,0),i.appendChild(r.createContextualFragment(t)),n.parentElement.insertBefore(i,a)}}function pmSortDelayedScripts(){document.querySelectorAll("script[type=pmdelayedscript]").forEach(function(e){e.hasAttribute("src")?e.hasAttribute("defer")&&!1!==e.defer?pmDelayedScripts.defer.push(e):e.hasAttribute("async")&&!1!==e.async?pmDelayedScripts.async.push(e):pmDelayedScripts.normal.push(e):pmDelayedScripts.normal.push(e)})}function pmPreloadDelayedScripts(){var e=document.createDocumentFragment();[...pmDelayedScripts.normal,...pmDelayedScripts.defer,...pmDelayedScripts.async].forEach(function(t){var n=t.getAttribute("src");if(n){var r=document.createElement("link");r.href=n,"module"==t.getAttribute("data-perfmatters-type")?r.rel="modulepreload":(r.rel="preload",r.as="script"),e.appendChild(r)}}),document.head.appendChild(e)}async function pmLoadDelayedScripts(e){var t=e.shift();return t?(await pmReplaceScript(t),pmLoadDelayedScripts(e)):Promise.resolve()}async function pmReplaceScript(e){return await pmNextFrame(),new Promise(function(t){let n=document.createElement("script");[...e.attributes].forEach(function(e){let t=e.nodeName;"type"!==t&&("data-perfmatters-type"===t&&(t="type"),n.setAttribute(t,e.nodeValue))}),e.hasAttribute("src")?(n.addEventListener("load",t),n.addEventListener("error",t)):(n.text=e.text,t()),e.parentNode.replaceChild(n,e)})}async function pmTriggerEventListeners(){pmDOMLoaded=!0,await pmNextFrame(),document.dispatchEvent(new Event("perfmatters-DOMContentLoaded")),await pmNextFrame(),window.dispatchEvent(new Event("perfmatters-DOMContentLoaded")),await pmNextFrame(),document.dispatchEvent(new Event("perfmatters-readystatechange")),await pmNextFrame(),document.perfmattersonreadystatechange&&document.perfmattersonreadystatechange(),await pmNextFrame(),window.dispatchEvent(new Event("perfmatters-load")),await pmNextFrame(),window.perfmattersonload&&window.perfmattersonload(),await pmNextFrame(),jQueriesArray.forEach(function(e){e(window).trigger("perfmatters-jquery-load")});let e=new Event("perfmatters-pageshow");e.persisted=window.pmPersisted,window.dispatchEvent(e),await pmNextFrame(),window.perfmattersonpageshow&&window.perfmattersonpageshow({persisted:window.pmPersisted})}async function pmNextFrame(){return new Promise(function(e){requestAnimationFrame(e)})}function pmReplayClicks(){window.removeEventListener("touchstart",pmTouchStartHandler,{passive:!0}),window.removeEventListener("mousedown",pmTouchStartHandler),pmInterceptedClicks.forEach(e=>{e.target.outerHTML===pmClickTarget&&e.target.dispatchEvent(new MouseEvent("click",{view:e.view,bubbles:!0,cancelable:!0}))})}function pmWaitForPendingClicks(){return new Promise(e=>{window.pmIsClickPending?pmPendingClickFinished=e:e()})}function pmPndingClickStarted(){window.pmIsClickPending=!0}function pmPendingClickFinished(){window.pmIsClickPending=!1}function pmClickHandler(e){e.target.removeEventListener("click",pmClickHandler),pmRenameDOMAttribute(e.target,"pm-onclick","onclick"),pmInterceptedClicks.push(e),e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),pmPendingClickFinished()}function pmTouchStartHandler(e){"HTML"!==e.target.tagName&&(pmClickTarget||(pmClickTarget=e.target.outerHTML),window.addEventListener("touchend",pmTouchEndHandler),window.addEventListener("mouseup",pmTouchEndHandler),window.addEventListener("touchmove",pmTouchMoveHandler,{passive:!0}),window.addEventListener("mousemove",pmTouchMoveHandler),e.target.addEventListener("click",pmClickHandler),pmRenameDOMAttribute(e.target,"onclick","pm-onclick"),pmPendingClickStarted())}function pmTouchMoveHandler(e){window.removeEventListener("touchend",pmTouchEndHandler),window.removeEventListener("mouseup",pmTouchEndHandler),window.removeEventListener("touchmove",pmTouchMoveHandler,{passive:!0}),window.removeEventListener("mousemove",pmTouchMoveHandler),e.target.removeEventListener("click",pmClickHandler),pmRenameDOMAttribute(e.target,"pm-onclick","onclick"),pmPendingClickFinished()}function pmTouchEndHandler(e){window.removeEventListener("touchend",pmTouchEndHandler),window.removeEventListener("mouseup",pmTouchEndHandler),window.removeEventListener("touchmove",pmTouchMoveHandler,{passive:!0}),window.removeEventListener("mousemove",pmTouchMoveHandler)}function pmRenameDOMAttribute(e,t,n){e.hasAttribute&&e.hasAttribute(t)&&(event.target.setAttribute(n,event.target.getAttribute(t)),event.target.removeAttribute(t))}window.pmIsClickPending=!1,window.addEventListener("pageshow",e=>{window.pmPersisted=e.persisted}),pmUserInteractions.forEach(function(e){window.addEventListener(e,pmTriggerDOMListener,{passive:!0})}),pmDelayClick&&(window.addEventListener("touchstart",pmTouchStartHandler,{passive:!0}),window.addEventListener("mousedown",pmTouchStartHandler)),document.addEventListener("visibilitychange",pmTriggerDOMListener);</script></body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1745271338 -->