検索

ホームページ  >  に質問  >  本文

php - MYSQL インデックス最適化の古典的な問題、

質問は次のとおりです。

< /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
某草草某草草2753日前558

全員に返信(1)返信します

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:09:33

    今、別の計画を考えています。それは

    アプリケーションテーブルのcat_idフィールドとcat_idによって作成されたインデックスを削除します

    分類テーブル (lmx_app_category) とアプリケーション テーブル (lmx_apps) の間の関係テーブルを作成します。

    フィールドはid、app_id、cat_idです

    この関連テーブルにインデックスを作成します。このソリューションがどのようなものになるかわかりません

    返事
    0
  • キャンセル返事