MySQL查询在localhost上运行缓慢 - 主要是网络持续时间

时间:2011-03-16 21:47:47

标签: mysql sql

我正在对20万行表中的索引列运行一个非常简单的查询。

select * from prvol where date = '20100203';

大约需要22秒。我是sql的新手,但认为索引列应该比这更快。没有内存问题。此外,输出表明时间主要在网络中。我正在服务器所在的同一台机器上运行查询。

/* 0 rows affected, 6,882 rows found. Duration for 1 query: 0.828 sec. (+ 21.438 sec. network) */

网络时间是什么意思?您希望此查询运行得更快吗?

编辑:根据要求,这是一些输出。

EXPLAIN SELECT * FROM prvol WHERE date = '20100203';
"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra"
"1","SIMPLE","prvol","ref","Index 1","Index 1","4","const","6881","Using where"

SHOW CREATE TABLE prvol;
"Table","Create Table"
"prvol","CREATE TABLE `prvol` (
  `exch` varchar(10) DEFAULT NULL,
  `ticker` varchar(10) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `open` float unsigned DEFAULT NULL,
  `high` float unsigned DEFAULT NULL,
  `low` float unsigned DEFAULT NULL,
  `close` float unsigned DEFAULT NULL,
  `vs` float unsigned DEFAULT NULL,
  `aclose` float DEFAULT NULL,
  KEY `Index 1` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1"

4 个答案:

答案 0 :(得分:2)

是的,绝对应该跑得更快。

您可能犯过以下常见错误之一:

  • 您为列编制了索引,但它不是date列。
  • 您创建了一个多列索引,但date列不是索引中的第一列,因此无法用于此查询。
  • 你清楚地记得添加一个索引,但不知何故索引似乎已“消失”(可能是因为你运行了查询并且它给出了一个错误,但你没有注意到错误信息)。

要找出它是什么,请运行SHOW CREATE TABLE prvol并发布输出。


您可以采取的另一件措施是避免使用SELECT *。始终只选择您需要的列。即使您认为您需要所有列,您仍应明确列出它们以确保安全性,以防架构在未来发生变化。

答案 1 :(得分:2)

我最终弄清楚为什么我的查询很慢。请参阅here以获取答案。它最终与网络时间无关。这是一个缓存大小问题。

答案 2 :(得分:1)

我实际上认为查询运行得很好。

在0.828秒内返回6,882行N列(选择*)是合理硬件上合理的时间。

网络时间21.438秒是通过网络传输x MB所需的时间,其中x = bytes per row * 7k可能是几十MB。但网络上的21s有点慢 - 但这不是查询问题

答案 3 :(得分:0)

我正在使用此库。它比Google的要快。

<script src="https://api.mqcdn.com/sdk/place-search-js/v1.0.0/place-search.js"></script>
<link type="text/css" rel="stylesheet" href="https://api.mqcdn.com/sdk/place-search-js/v1.0.0/place-search.css"/>

<script type="text/javascript">

var ps;
window.onload = function () {
    ps = placeSearch({
        key: 'lYrP4vF3Uk5zgTiGGuEzQGwGIVDGuy24',
        container: document.querySelector('#place-search-input'),
        useDeviceLocation: false,
        collection: [
            'poi',
            'airport',
            'address',
            'adminArea',
        ]
    });
}