我看了論壇上很多帖子,但我仍然對創建索引,以加快在MySQL連接查詢的混亂,這裏是我的疑問混亂創建索引來提高連接性能在MySQL
我有兩個表,一個是category
表,其中只包含幾千行,幷包含所有有關數據的信息,另一個是geo_data
包含大量數據的表,我加入geo_data
表基於2個鍵s_key1
和s_key2
。以下是表
類別表
CREATE TABLE `category` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`s_key1` int(11) DEFAULT NULL,
`s_key2` int(11) DEFAULT NULL,
`STD_DATE` datetime DEFAULT NULL,
`LATITUDE` float DEFAULT NULL,
`LONGITUDE` float DEFAULT NULL,
`COUNTRY_CD` varchar(15) DEFAULT NULL,
`INSTR_CODE` varchar(15) DEFAULT NULL,
`CANADACR_CD` varchar(15) DEFAULT NULL,
`PROBST_T` varchar(15) DEFAULT NULL,
`TYPE` varchar(15) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=32350 DEFAULT CHARSET=latin1;
geo_data表
CREATE TABLE `geo_data` (
`s_key1` int(11) DEFAULT NULL,
`s_key2` int(11) DEFAULT NULL,
`MAGNETIC` float DEFAULT NULL,
`GRAVITY` float DEFAULT NULL,
`BATHY` float DEFAULT NULL,
`CORE` float DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
我有很多表等,其含有s_key1
,s_key2
等欄目,在我的應用geo_data
表我經常使用字段std_date,緯度,經度,country_cd,從category
表
我做內部聯接,有時留根據需求加入,例如我的查詢看起來像下面
SELECT
c.s_key1,
c.s_key2,
c.std_date,
c.latitude,
c.longitude,
g.magnetic,
g.bathy
FROM
category c, geo_data g
WHERE
c.s_key1 = g.s_key1 && c.s_key2 = g.s_key2;
,有時我where
子句將有這樣的事情太
WHERE
c.latitude between -30 to 30 AND
c.longitude between 10 to 140 AND
c.country_cd = 'INDIA' AND
c.type = 'NON_PROFIT';
那麼,創建索引以加快我的查詢的正確方法是什麼?請別人幫
create index `myindex` on
`category` (s_key1,s_key2,std_date,latitude,longitude,country_cd)
create index `myindex` on
`geo_data` (s_key1,s_key2)
還有一個疑問,這兩個表(類別,geo_data)是否應該有索引鍵來提高性能或者只geo_data表?
與聯接查詢我倒是去創建索引'myindex'在 'geo_data'(s_key1,s_key2)由於這一事實,你必須在聲明 –
@YehiaAwad的&&:有時我需要從類別表對比緯度,經度爲好,所以如果我只用s_key1創建索引,s_skey2上類別表會提高性能嗎? – user3637224