从PHP调用的查询中的MySQL(MariaDB)执行超时
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从PHP调用的查询中的MySQL(MariaDB)执行超时,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1621字,纯文字阅读大概需要3分钟。
内容图文
![从PHP调用的查询中的MySQL(MariaDB)执行超时](/upload/InfoBanner/zyjiaocheng/906/04bec045c4824489a955a590f86eed32.jpg)
我正在为我的数据库测试地理定位搜索系统.它已经在很多优化中内置了这样的方盒长/拉索引系统,以便在执行弧距计算之前缩小搜索范围.我的目标是从一张桌子上为10,000,000名用户提供服务.
目前,基于其他条件(例如年龄,性别等),我的查询时间在0.1到0.01秒之间.这适用于在英国均匀分布的10,000,000名用户.
我有一个LIMIT条件,因为我需要向用户显示X人,其中X可以在16到40之间.
问题是当没有其他用户/少数用户匹配时,查询可能需要很长时间,因为它无法快速达到LIMIT并且可能必须扫描400,000行.
我可以看看其他优化技术,但我的问题是:
有没有办法让查询在X秒后放弃?如果它需要超过1秒,那么它将不会返回结果,我很高兴发生这种情况.在伪查询代码中,它将类似于:
选择数据FROM表WHERE ……. LIMIT 16 GIVEUP在1 SECOND之后
我已经考虑过一个cron解决方案来杀死慢速查询,但这不是很优雅.在生产中,每隔几秒就会调用一次查询,因此cron需要连续打开.
有什么建议?
>版本是10.1.14-MariaDB
解决方法:
在10.1版中使用MariaDB,您有两种限制查询的方法.它可以根据时间或查询的行总数来完成.
按行:
SELECT ... LIMIT ROWS EXAMINED rows_limit;
你可以使用关键字EXAMINED并设置像你提到的400000行(从MariaDB 10.0开始).
按时间:
If the max_statement_time variable is set, any query (excluding stored
procedures) taking longer than the value of max_statement_time
(specified in seconds) to execute will be aborted. This can be set
globally, by session, as well as per user and per query.
如果你想要一个特定的查询,我想,你可以使用这个:
SET STATEMENT max_statement_time=1 FOR
SELECT field1 FROM table_name ORDER BY field1;
请记住,max_statement_time是以秒为单位设置的(与MySQL相反,为毫秒),因此您可以更改它,直到找到最适合您的情况(从MariaDB 10.1开始).
如果您需要更多信息,我建议您使用excellent post关于查询超时.
希望这对你有所帮助.
内容总结
以上是互联网集市为您收集整理的从PHP调用的查询中的MySQL(MariaDB)执行超时全部内容,希望文章能够帮你解决从PHP调用的查询中的MySQL(MariaDB)执行超时所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。