0

クエリ時間を短縮しようとしています。私は codeigniter を使用しています...テーブル内のレコードが100以下のクエリ...クエリは2ミリ秒かかります。テーブルから 1 つのレコードを取得し、2 つの where ステートメントが 35 ミリ秒かかっている 1 つのクエリ...テーブルには 5000 レコードがあります...

        $this->db -> where ('DealSiteId', $q1['DealSiteId'] );
        $this->db -> where ('DealUniqueId',$q1['DealUniqueId'] );

        $dup= $this-> db -> get ('deals');
        $dup1 = $dup -> result();


      if (count($dup1)!=0){

            $data['error']="Duplicate, This deal already exists. ";
            return $data;
        }

where句の両方のフィールドにインデックスを追加します...インデックスタイプBTREE。重複をチェックするより速い方法はありますか?

4

3 に答える 3

0

両方のフィールドを含む複合インデックスを作成した場合、クエリは単一のインデックスを使用して効率を高めることができます。

于 2013-03-14T16:32:12.827 に答える
0

両方のフィールドに個別のインデックスを追加しましたか、それとも1つの組み合わせたインデックスを追加しましたか?

いずれにせよ、クエリをmysql(またはphpMyAdminなど)で直接テストし、EXPLAIN何が起こっているかを確認するために使用する必要があります:http: //dev.mysql.com/doc/refman/5.5/en/explain.html

特定のケースでは、とuniqueの組み合わせにインデックス/制約を追加できます。それは次のようになります(アイデアを与えるためだけに、テストされていません...):DealSiteIdDealUniqueId

ALTER TABLE `deals` ADD UNIQUE `some_name` ( `DealSiteId` , `DealUniqueId` );
于 2013-03-14T16:32:28.453 に答える
0

クエリが可能な限り効率的であるかどうかを判断する簡単な方法は、MySQLEXPLAINを使用することです。CodeIgniter 内でこれを行うには、次のようにします。

$this->db->where('DealSiteId', $q1['DealSiteId'] );
$this->db->where('DealUniqueId',$q1['DealUniqueId'] );

$result = $this->db->get('deals');
echo $this->db->last_query();

印刷された結果を取得し、MySQL コマンドに対して実行しEXPLAIN <your query>ます。これにより、そのクエリに関する有用な情報が得られます。つまり、インデックスを使用している場合、スキャンしている行数、並べ替えを使用している場合、一時テーブルを作成している場合などです。そこからクエリを最適化して、最良の結果を得ることができます。

于 2013-03-14T16:42:15.590 に答える