首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在从mysql表中获取记录总数-太慢

正在从mysql表中获取记录总数-太慢
EN

Stack Overflow用户
提问于 2010-07-28 01:04:33
回答 4查看 488关注 0票数 0

我有一个文件,它遍历一个大型数据集,并以分页的方式拆分行。数据集包含大约210k行,这甚至不是很多,它将在几周内增长到3Mil+,但它已经很慢了。

我的第一个查询是获取数据库中特定WHERE子句组合的条目总数,最基本的查询如下所示:

代码语言:javascript
复制
SELECT count(v_id) as num_items FROM versions 
WHERE v_status = 1

它需要0.9秒才能运行。

第二个查询是一个限制查询,它获取该页面的实际数据。这个查询非常快。(小于0.001秒)。

代码语言:javascript
复制
SELECT 
        v_id, 
        v_title,
        v_desc
    FROM versions 
    WHERE v_status = 1 
    ORDER BY  v_dateadded DESC 
    LIMIT 0, 25

在v_status上有一个索引,v_dateadded

我使用php。我将结果缓存到memcace中,因此后续请求非常快,但是第一个请求很慢。特别是一旦我在其中加入全文搜索,它开始花费2-3秒的2-3秒的查询。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-28 01:08:30

我不认为这是正确的,但尝试让它计数(*),我认为count(x)必须遍历每一行,并且只计算那些没有空值的行(所以它必须遍历所有行)

鉴于v_id是一个主键,它不应该有任何空值,因此尝试使用count(*) ...

但我不认为它会有帮助,因为你有一个where子句。

票数 2
EN

Stack Overflow用户

发布于 2010-07-28 01:08:03

不确定这是否与MySQL相同,但在MS SQL Server中,计数(*)几乎总是比计数(列)快。解析器确定要计数的最快列,并使用该列。

票数 0
EN

Stack Overflow用户

发布于 2010-07-28 01:24:21

运行一个explain计划,查看优化器如何运行查询。

这可能会告诉您Andreas Rehm告诉您的内容:您将希望添加覆盖where子句的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3346018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档