首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库性能问题

数据库性能问题
EN

Stack Overflow用户
提问于 2013-10-24 20:46:19
回答 3查看 46关注 0票数 0

在非常基本的查询中,我遇到了一些查询时间长的问题。这是我第一次使用一个更大的表(1250万行),我只是想弄清楚什么是瓶颈,或者我能做些什么来提高性能。所有数据都在一个表中。

服务器规范:

Windows 2008 R2标准英特尔Xeon X3430 @2.40GHz4GBRAM 1TB 7200RPMHDD

表信息

ID int(10) UN

商店 int(2) UN

日期日期时间

寄存器 int(2) UN

收银员 int(3) UN

部门 int(4)联合国

十进制(7,2)

Customers int(5) UN

项目 int(5) UN

Time int(5) UN

示例查询和Times

代码语言:javascript
复制
SELECT Store, sum(Total)   
FROM sales   
GROUP BY Store

19.56sec

代码语言:javascript
复制
SELECT Date, Register, Customers, Items, Total   
FROM sales  
WHERE Date(Date) = Date('2013-10-22')   
AND Store = 1

9.59sec

当然,我可以提供更多的信息,但是否有什么显而易见的事情可以解释为什么这些数据运行得如此缓慢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-24 20:51:35

是的,有两个突出的问题。在第一个查询中,您没有标准--因此您要求读取、分组和总结整个sales表。分组还将创建一个临时表。因此,您将进行表格扫描,这将仅限于硬件可以提供的io性能,这可能是您的瓶颈。

在第二个查询中,您要对Date列Date( Date )执行一个函数,这意味着即使您有一个日期索引,它也将无法利用该索引,因此您将再次对表进行扫描。

这么说,您应该运行explain扩展SELECT。在每个查询中获得对此评估的信任。

票数 0
EN

Stack Overflow用户

发布于 2013-10-24 20:54:08

查询1:

代码语言:javascript
复制
SELECT Store, sum(Total)
FROM sales
GROUP BY Store ;

(Store, Total)上添加索引

代码语言:javascript
复制
ALTER TABLE sales
  ADD INDEX store_total_IX             -- pick a name for the index
    (store, total) ;

查询2:

代码语言:javascript
复制
SELECT Date, Register, Customers, Items, Total
FROM sales
WHERE Date(Date) = Date('2013-10-22')
AND Store = 1 ;

(Store, Date)上添加索引

代码语言:javascript
复制
ALTER TABLE sales
  ADD INDEX store_date_IX             -- pick a name for the index
    (store, date) ;

并重写查询-以便索引可以使用-如下:

代码语言:javascript
复制
SELECT Date, Register, Customers, Items, Total
FROM sales
WHERE Date >= '2013-10-22'
  AND Date < '2013-10-22' + INTERVAL 1 DAY
  AND Store = 1 ;
票数 1
EN

Stack Overflow用户

发布于 2013-10-24 20:53:46

对于第二个查询,您可以尝试两种方法:(1)为datetime列创建索引。(2)使用整数代替日期时间,2013年-10-22 => 20131022

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

https://stackoverflow.com/questions/19576308

复制
相关文章

相似问题

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