从PHP调用的查询中的MySQL(MariaDB)执行超时
我正在为我的数据库测试地理定位搜索系统.它已经在很多优化中内置了这样的方盒长/拉索引系统,以便在执行弧距计算之前缩小搜索范围.我的目标是从一张桌子上为10,000,000名用户提供服务.
目前,基于其他条件(例如年龄,性别等),我的查询时间在0.1到0.01秒之间.这适用于在英国均匀分布的10,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开始). 按时间:
如果你想要一个特定的查询,我想,你可以使用这个: SET STATEMENT max_statement_time=1 FOR SELECT field1 FROM table_name ORDER BY field1; 请记住,max_statement_time是以秒为单位设置的(与MySQL相反,为毫秒),因此您可以更改它,直到找到最适合您的情况(从MariaDB 10.1开始). 如果您需要更多信息,我建议您使用excellent post关于查询超时. 希望这对你有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |