0

私はポータル/大規模なWebサイトで作業していますが、特別な場合にmySql/PDOクエリを最適化する方法について質問があります。

私はそれをこのように開発しました:iD(一意/プライマリ)を挿入するとき、特定のテーブルで最も高い未使用のIDを見つけるために次のコードを実行し、次にそのID($ next_avail)でINSERTを実行します。

先日のstackoverflowでの短いチャットの後、AUTO_INCREMENTがこのアクションに最適であるという考えを思いつきました。

しかし今では、ほとんどの場合、$ next_avail(AUTO_INCREMENTの値)を使用して、他のテーブルにも列として挿入していることに気付きました。

したがって、私のコードはこれらの挿入に意味があります。

私の質問は、以下のこのコードは、速度として数百万行に対してどのように機能するかということです。挿入するたびに、それに依存します。

この質問では、コメントを書いて、あなたにとって明確でないことを明確にするように私に頼んでください。

ありがとう、エイドリアン

$next_avail = 1 ;
                    $stmt = $db->prepare("SELECT news_id from mya_news ORDER BY news_id DESC LIMIT 1");
                    $stmt->execute();
                    while ( list($id) = $stmt->fetch(PDO::FETCH_BOTH) ) {                                                   
                        $next_avail = $id + 1;
                    }
4

2 に答える 2

3

これを行う必要はありません。テーブルでauto_incrementを使用し、PHP関数を使用してlast_inserted_idを取得するだけです。mysql_insert_id()

このサイトを見てください:http: //php.net/manual/en/function.mysql-insert-id.php

これはPDOhttp ://php.net/manual/en/pdo.lastinsertid.phpを使用しています

于 2012-10-11T12:43:27.900 に答える
2

結果を並べ替えて制限を使用するのではなく、おそらくmaxを使用します。

ただし、これは非常に危険です。2ビットの処理で両方が同時に同じ$next_availを取得する可能性。AUTO_INCREMENT列の値を使用するように、行を挿入する順序を変更することをお勧めします(または、ダミー行を挿入して次のIDを取得し、後で行を更新することもできます)。

于 2012-10-11T12:47:19.853 に答える