< /p>
これのように
< /p>
テーブル構造は次のとおりです。
CREATE TABLE `lmx_app_category` (
`id` int(11) NOT NULL DEFAULT '0' COMMENT 'カテゴリ番号',
`pid` tinyint(4) NOT NULL DEFAULT '1' COMMENT '分類の種類 (現在 2: 1: アプリケーション、2: ゲーム)',
`name` varchar(50) NOT NULL コメント 'カテゴリ名',
主キー (`cat_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='アプリケーション分類表';
CREATE TABLE `lmx_apps` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'アプリ番号',
`cat_id` int(11) NOT NULL DEFAULT '0' COMMENT 'カテゴリ番号',
`name` varchar(100) NOT NULL コメント 'アプリ名',
`年` char(5) NOT NULL デフォルト '0' コメント '年',
`down_count` bigint(20) NOT NULL デフォルト '0' コメント 'ダウンロード',
`hit_count` bigint(20) DEFAULT '0' COMMENT '検索ボリューム',
主キー (`id`)、
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
これで 2 つのジョイント インデックスを作成しました:
< /p>
しかし、これら 2 つのインデックスにはいくつかの問題があります。[すべて検索] をクリックすると、カテゴリの検索時にインデックスが作成されずにすべてが選択されるというこの問題を解決するにはどうすればよいですか?
ブロック引用 >インデックス作成の SQL は次のとおりです。
-- EXPLAIN SELECT a.id,a.cat_id,a.`name`,a.down_count,b.`name` FROM `lmx_apps` a 内部結合 `lmx_app_category` `b` ON `a`.`cat_id`=`b`.`id` どこ a.cat_id = 103 ORDER BY a.down_count DESC リミット10、20
インデックスなしの SQL は次のとおりです
SELECT a.id,a.cat_id,a.`name`,a.down_count,b.`name` FROM `lmx_apps` a 内部結合 `lmx_app_category` `b` ON `a`.`cat_id`=`b`.`id` - どこ -- a.cat_id IN (lmx_app_category WHERE orgame = 1 から cat_id を選択) -- cat_id 条件が存在しない、または条件が in の場合 ORDER BY a.down_count DESC リミット10、20
曾经蜡笔没有小新2017-05-16 13:09:33
今、別の計画を考えています。それは
アプリケーションテーブルのcat_idフィールドとcat_idによって作成されたインデックスを削除します
分類テーブル (lmx_app_category) とアプリケーション テーブル (lmx_apps) の間の関係テーブルを作成します。
フィールドはid、app_id、cat_idですこの関連テーブルにインデックスを作成します。このソリューションがどのようなものになるかわかりません