草庐IT

Mysql SQL_CALC_FOUND_ROWS 和分页

coder 2023-06-11 原文

所以我有一个表,其中有超过 500 万行。当我使用 SQL_CALC_FOUND_ROWS 时,查询永远挂起。当我把它拿出来时,查询在一秒钟内执行,限制为 25。我的问题是出于分页原因,是否有替代方法来获取总行数?

最佳答案

SQL_CALC_FOUND_ROWS 强制 MySQL 扫描所有匹配的行,即使它们永远不会被获取。在内部,它相当于在没有 LIMIT 子句的情况下执行相同的查询。

如果您通过 WHERE 进行的过滤不是太疯狂,您可以计算并缓存各种类型的过滤器以节省 calc_found_rows 施加的全扫描负载。对于大多数可能的 where 子句,基本上运行“select count(*) from ... where ....”。

否则,您可以采用 Google 的方式,只是吐出一些偶尔与现实无关的页码(您知道,您会看到“Gooooooooooooogle”,进入第 3 页,然后突然用完结果)。

关于Mysql SQL_CALC_FOUND_ROWS 和分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765901/

有关Mysql SQL_CALC_FOUND_ROWS 和分页的更多相关文章

  1. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  2. ruby - 获取错误 : dyld: Symbol not found: _clock_gettime - 2

    我想用middlemanserver命令启动一个中间人,当我这样做时我得到一个错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_clock_gettimeReferencedfrom:/usr/local/lib/ruby/gems/2.3.0/gems/eventmachine-1.2.0.1/lib/rubyeventmachine.bundle(whichwasbuiltforMacOSX10.12)Expectedin:/usr/lib/libSystem.B.dylibdyld:Symbolnotfound:_clock_gett

  3. ruby - 为 IO::popen 拯救 "command not found" - 2

    当我将IO::popen与不存在的命令一起使用时,我在屏幕上打印了一条错误消息:irb>IO.popen"fakefake"#=>#irb>(irb):1:commandnotfound:fakefake有什么方法可以捕获此错误,以便我可以在脚本中进行检查? 最佳答案 是:升级到ruby​​1.9。如果您在1.9中运行它,则会引发Errno::ENOENT,您将能够拯救它。(编辑)这是在1.8中的一种hackish方式:error=IO.pipe$stderr.reopenerror[1]pipe=IO.popen'qwe'#

  4. ruby-on-rails - 如何防止错误 "code converter not found (UTF-8)"? - 2

    我在生产环境(CentOS5.6)中遇到此错误,但在开发环境(Ubuntu11.04)中运行良好。在这两种环境中,该应用程序都使用Ruby1.9.3和Rails3.0.9,并由passenger和nginx提供服务。我的Mechanizegem版本是2.3。未找到代码转换器(UTF-8)此代码的最后一行触发它:mech=Mechanize.newpage=mech.get("http://myurl.com/login.php?login_name=a&password=b")form=page.form_with(:name=>"loginForm")form.field_with(

  5. Unity 报错No ‘git‘ executable was found. Please install Git on your system then restart - 2

    亲测可用。Anerroroccurredwhileresolvingpackages:Projecthasinvaliddependencies: com.unity.xxx:No'git'executablewasfound.PleaseinstallGitonyour  systemthenrestartUnityandUnityHub在我们使用PackageManager时,Unity允许我们使用Git上的package(点击加号,选择addpackagefromgitURL,或者是直接在Asset/Packages/manifest.json中添加包名)。但是这种操作需要我们事先装好g

  6. ruby-on-rails - Ruby float 学 - Sum Calc 中的精度问题 - 2

    大家早上好我在float学方面遇到了一些问题,完全迷失在“.to_f”、“*100”和“.0”中!我希望有人能帮助我解决我的具体问题,并准确解释他们的解决方案为何有效,以便我下次理解这一点。我的程序需要做两件事:对一组小数求和,确定它们的和是否正好为1.0确定1.0与数字总和之间的差值-将变量的值设置为使总和等于1.0的精确差值。例如:[0.28,0.55,0.17]->总和应为1.0,但我一直得到1.xxxxxx。我正在以下列方式实现总和:sum=array.inject(0.0){|sum,x|sum+(x*100)}/100我需要此功能的原因是我正在读取一组来自excel的小数。

  7. ruby-on-rails - rails : Find rows without connection in HABTM relation - 2

    我有两个模型,Users和Leads与HABTM关系相关:classLead我现在如何才能只获得那些与用户无关的线索?提前致谢! 最佳答案 您正在寻找的是antijoin.有三种标准方法可以实现这一点,使用空左外连接使用带有NOT和IN关键字的子查询的where子句使用带有NOT和EXISTS关键字的where子句基本上,EXISTS关键字将检查子查询是否返回任何行并将其报告为匹配项,NOT显然会否定真正的匹配项。这是我的首选方式(使用NOT&EXISTS)classUser这是一个使用arel的非SQL方法classUserher

  8. ruby-on-rails - 迪尔德 : Symbol not found: _rb_ary_new_from_values When trying to run foreman start - 2

    尝试运行“foremanstart”来执行我的rails文件时,我收到以下错误。dyld:Symbolnotfound:_rb_ary_new_from_valuesReferencedfrom:/Users/paulbattisson/.rvm/gems/ruby-2.1.1/gems/psych-2.0.5/lib/psych.bundleExpectedin:flatnamespace如果我运行railss那么应用程序可以正常启动,但是我想使用以下Procfile:web:bundleexecrackupconfig.ru-p$PORTresque:envTERM_CHILD=1

  9. ruby-on-rails - rbenv : bundle: command not found on production server - 2

    我正在尝试部署Rails应用程序,但遇到错误DEBUG[1a70ba92]Command:cd/home/deploy/myapp/releases/20140615090226&&(PATH=$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATHRBENV_ROOT=~/.rbenvRBENV_VERSION=2.1.2~/.rbenv/bin/rbenvexecbundleinstall--binstubs/home/deploy/myapp/shared/bin--path/home/deploy/myapp/shared/bundle--withou

  10. No loop matching the specified signature and casting was found for ufunc greater - 2

    目录报错信息np.greater学习临时解决方法:np.greater去掉dtype报错信息pipinstallnumpy==1.24报错代码:dda=np.cumsum(np.greater(counts,0),dtype=np.int32)print(dda)Noloopmatchingthespecifiedsignatureandcastingwasfoundforufuncgreaternp.greater学习1.函数功能:判断参数一是否大于参数二。2.参数介绍  arr1:第一个参数类似一个数组  arr2:第二个参数类似一个数组  out:返回值是bool类型或者是元素为bool

随机推荐