首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化sql查询

优化sql查询
EN

Stack Overflow用户
提问于 2010-09-15 14:53:00
回答 2查看 151关注 0票数 1

可以优化这个查询吗?

代码语言:javascript
复制
SELECT count(locId) AS antal , locId 
FROM `geolitecity_block` 
WHERE (1835880985>= startIpNum AND 1835880985 <= endIpNum) 
  OR (1836875969>= startIpNum AND 1836875969 <= endIpNum) 
  OR (1836878754>= startIpNum AND 1836878754 <= endIpNum)
  ...
  ... 
  OR (1843488110>= startIpNum AND 1843488110 <= endIpNum)
GROUP BY locId ORDER BY antal DESC LIMIT 100

这张桌子看起来像这样

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `geolitecity_block` (
  `startIpNum` int(11) unsigned NOT NULL,
  `endIpNum` int(11) unsigned NOT NULL,
  `locId` int(11) unsigned NOT NULL,
  PRIMARY KEY (`startIpNum`),
  KEY `locId` (`locId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

更新和解释查询如下所示

代码语言:javascript
复制
+----+-------------+-------------------+-------+---------------+-------+---------+------+------+----------------------------------------------+
| id | select_type | table             | type  | possible_keys | key   | key_len | ref  | rows | Extra                                        |
+----+-------------+-------------------+-------+---------------+-------+---------+------+------+----------------------------------------------+
|  1 | SIMPLE      | geolitecity_block | index | PRIMARY       | locId | 4       | NULL |  108 | Using where; Using temporary; Using filesort |
+----+-------------+-------------------+-------+---------------+-------+---------+------+------+----------------------------------------------+
EN

回答 2

Stack Overflow用户

发布于 2010-09-22 18:35:59

对正在分组或排序的列进行索引,几乎总是会提高性能。我建议将这个查询插入DTA (数据库调优顾问),看看SQL是否可以提出任何建议,这可能包括除了统计之外创建一个或多个索引。

票数 0
EN

Stack Overflow用户

发布于 2010-09-22 18:55:22

如果在您的用例中可能的话,创建一个临时表TMP_RESULT (移除订单),而不是提交由antal生成的第二个订单查询。Filesort非常慢,而且--在您的情况下--您无法避免这个操作,因为您没有按任何键/索引进行排序。要执行计数操作,必须扫描完整的表。临时表是一个更快的解决方案。

ps。在(startIpNum,endIpNum)上添加一个索引肯定会帮助您获得更好的性能,但是--如果您有很多行--这不是一个很大的改进。

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

https://stackoverflow.com/questions/3718843

复制
相关文章

相似问题

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