English 中文(简体)
采用指数,按条款优化与小组的查询
原标题:Optimization of a query with GROUP BY clause by using indexes
  • 时间:2011-11-22 21:00:17
  •  标签:
  • mysql
  • sql

我需要在一个储存10多万行的表格中优化指数。 尤其耗费时间的问题需要10秒才能装载(当WHERE条款只过滤大约2百万分——8百万分必须分类时)。 我制定了几个指数(其中一些比较复杂,有些比较简单),并试图找出如何加快这一速度。 或许 我做的是错的。 我的SQL正在使用优化的5指数(基于EXPLAIN)。

表格结构和问题:

 CREATE TABLE IF NOT EXISTS `geo_reverse` (
     `fid` mediumint(8) unsigned NOT NULL,
     `tablename` enum( table1 , table2 ) NOT NULL default  table1 ,
   `geo_continent` varchar(2) NOT NULL,
   `geo_country` varchar(2) NOT NULL,
   `geo_region` varchar(8) NOT NULL,
   `geo_city` mediumint(8) unsigned NOT NULL,
   `type` varchar(30) NOT NULL,

  PRIMARY KEY  (`fid`,`tablename`,`geo_continent`,`geo_country`,`geo_region`,`geo_city`),
   KEY `geo_city` (`geo_city`),
   KEY `fid` (`fid`),
   KEY `geo_region` (`geo_region`,`geo_city`),
   KEY `optimized` (`tablename`,`type`,`geo_continent`,`geo_country`,`geo_region`,`geo_city`,`fid`),
   KEY `optimized_2` (`fid`,`tablename`),
   KEY `optimized_3` (`type`,`geo_city`),
   KEY `optimized_4` (`geo_city`,`tablename`),
   KEY `optimized_5` (`tablename`,`type`,`geo_city`),
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

实例:

SELECT type, COUNT(*) AS objects FROM geo_reverse WHERE tablename =  table1  AND geo_city IN (5847207,5112771,4916894,...) GROUP BY type

你们对如何加快计算是否有任何想法?

最佳回答

i) 使用以下指数:(城市、表名、类型)——地貌显然比表名称更具有选择性,因此应该留在左边。 在适用条件后,其余部分应按分类类型分类。

问题回答

暂无回答




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签