就像這樣的
表結(jié)構(gòu)如下:
CREATE TABLE `lmx_app_category` (
`id` int(11) NOT NULL DEFAULT '0' COMMENT '分類編號(hào)',
`pid` tinyint(4) NOT NULL DEFAULT '1' COMMENT '分類的類型(目前兩個(gè) 1:應(yīng)用,2:游戲)',
`name` varchar(50) NOT NULL COMMENT '分類名稱',
PRIMARY KEY (`cat_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='應(yīng)用分類表';
CREATE TABLE `lmx_apps` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'app編號(hào)',
`cat_id` int(11) NOT NULL DEFAULT '0' COMMENT '分類編號(hào)',
`name` varchar(100) NOT NULL COMMENT 'app名稱',
`year` char(5) NOT NULL DEFAULT '0' COMMENT '年份',
`down_count` bigint(20) NOT NULL DEFAULT '0' COMMENT '下載量',
`hit_count` bigint(20) DEFAULT '0' COMMENT '搜索量',
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
我現(xiàn)在建立了兩個(gè)聯(lián)合索引:
但是這個(gè)兩個(gè)索引存在幾個(gè)問(wèn)題,如果我點(diǎn)擊搜尋全部 那麼 排序就不會(huì)走索引,怎麼解決這個(gè)搜尋分類時(shí)選擇 全部 不走索引的問(wèn)題、
走索引的 sql 如下:
-- EXPLAIN
SELECT a.id,a.cat_id,a.`name`,a.down_count,b.`name` FROM `lmx_apps` a
INNER JOIN `lmx_app_category` `b`
ON `a`.`cat_id`=`b`.`id`
WHERE
a.cat_id = 103
ORDER BY a.down_count DESC
LIMIT 10,20
不走索引的 sql 如下
SELECT a.id,a.cat_id,a.`name`,a.down_count,b.`name` FROM `lmx_apps` a
INNER JOIN `lmx_app_category` `b`
ON `a`.`cat_id`=`b`.`id`
-- WHERE
-- a.cat_id IN (SELECT cat_id FROM lmx_app_category WHERE orgame = 1)
-- 當(dāng)沒(méi)有 cat_id 這個(gè)條件 或者這個(gè)條件為 in 時(shí)
ORDER BY a.down_count DESC
LIMIT 10,20
現(xiàn)在想到另一個(gè)方案,就是
把應(yīng)用程式表的 cat_id欄位和cat_id 建立的索引刪掉
分類表(lmx_app_category)和應(yīng)用表(lmx_apps)建立一個(gè)關(guān)聯(lián)表,
欄位為 id,app_id,cat_id
在這個(gè)關(guān)聯(lián)表上面建立 索引,不知道這種方案怎麼樣