1

私のテーブルに含める方法についてあなたの助けが必要です INDEXES、私はそれについていくつかのチュートリアルで読みましたが、それでも私のデータベースにそれを実装することはできません。データベースの効率を上げるために:私はwampserverにインストールしましたが、少し高速です。また、必要に応じてクエリでphp_apc.dllの使用を避けようとしました 。SELECT * しかし、どのように実装するか INDEXが私の問題です。どこが必要か教えていただければ幸いINDEXです。

これが私のデータベーススキーマです

  Database: RESULTS
  -------------------

   Table: STUDENTS
   - studentID (int)
   - first_name (varchar)
   - last_name (varchar)
   - other_name (varchar)

   Table: COURSES
   - courseID (int)
   - course_code (varchar)
   - course_title (varchar)
   - course_unit (int)

   Table: SEMESTER
   - semesterID
   - semester_name

   Table: MAINTABLE
   - scoresID (int)
   - courseID (int)
   - studentID (int)
   - semester_name (varchar)
   - session (varchar) 
   - score (int)
   - grade (varchar)
   - remarks (varchar)

私のクエリのほとんどは、 INSERTINTO MAINTABLESTUDENTS.....、 SELECTFROM MAINTABLESTUDENTSおよびCOURSES

ご理解とご協力のほどよろしくお願いいたします。とても感謝しています。ありがとう。

**クエリの例」

                   $query2 = mysql_query("SELECT       first_name, last_name
        FROM students 
      WHERE matric_no = '".$matric_no."' ");
    ($row2 = mysql_fetch_array($query2)); 

    $query3 = mysql_query("SELECT  SUM(c.        course_unit) AS 'TOTAL'
               FROM    maintable AS m  
           INNER JOIN students AS s ON
                m.matric_no = s.matric_no
          INNER JOIN courses AS c ON
             m.course_code = c.course_code
       WHERE m.matric_no = '".$matric_no."'
          AND m.level = '".$level."'") or 
 die (mysql_error());

             $query4 = mysql_query("SELECT  c.          course_unit, m.score 
         FROM    maintable AS m  
                 INNER JOIN students AS s ON
                      m.matric_no = s.matric_no
                  INNER JOIN courses AS c ON
           m.course_code = c.course_code
      WHERE m.matric_no = '".$matric_no."'
                      AND m.level = '".$level."'") 
      or die (mysql_error()); 

              $query5 = mysql_query("SELECT  c.         course_unit, m.score 
             FROM    maintable AS m  
         INNER JOIN students AS s ON
             m.matric_no = s.matric_no
                     INNER JOIN courses AS c ON
                 m.course_code = c.course_code
     WHERE m.matric_no = '".$matric_no."'")           or die (mysql_error()); 


    $query6 = mysql_query("SELECT  SUM(c.              course_unit) AS 'TOTAL'
                     FROM    maintable AS m  
                      INNER JOIN students AS s ON
                              m.matric_no = s.matric_no
                      INNER JOIN courses AS c ON
                 m.course_code = c.course_code
      WHERE m.matric_no = '".$matric_no."'")           or die (mysql_error());     



            $query7 = mysql_query("SELECT  m.                            course_code AS 'Course Code',        c.course_title AS 'Course Title'
 , c.course_unit AS 'Unit',
  m.score AS 'Score', m.grade AS 'Grade'
                      FROM    maintable AS m  
                      INNER JOIN students AS s ON
                m.matric_no = s.matric_no
                      INNER JOIN courses AS c ON
                 m.course_code = c.course_code
  WHERE m.matric_no = '".$matric_no."'
  AND m.level = '".$level."'") 
   or die (mysql_error());
               $number_cols = mysql_num_fields         ($query7);

            $query8 = mysql_query("SELECT  m.         score, m.course_code 
                      FROM    maintable AS m  
                      INNER JOIN students AS s ON
                              m.matric_no = s.matric_no
                      INNER JOIN courses AS c ON
                 m.course_code = c.course_code
         WHERE m.matric_no = '".$matric_no."'
      AND m.score >= 0 AND m.score < 40 ")         or die (mysql_error());

                   $query9 = mysql_query("SELECT          m.grade, m.course_code 
                      FROM    maintable AS m  
                      INNER JOIN students AS s ON
                              m.matric_no = s.matric_no
                      INNER JOIN courses AS c ON
               m.course_code = c.course_code
         WHERE m.matric_no = '".$matric_no."'
                      AND m.grade = 'AR'") 
    or die (mysql_error());

私のフォーマットを許してください。携帯から入力しました。お時間をいただきありがとうございます。

4

3 に答える 3

3

これは少し一般的すぎてここで十分に答えることはできませんが、WHERE句に焦点を当てることをお勧めします。WHEREで何かを頻繁に使用する場合は、それにインデックスを付けると、クエリが高速になります。また、結合を行う場合は、ON句で使用するものにインデックスを付けます。それはあまりにも一般化されすぎているので、私はそれを言うために襲われることを期待していますが、一般的な質問は一般的な答えを生みます。

より具体的には、テーブル構造を表示し、実際に1つまたは2つのクエリを表示することです。しかし、それは私たちがあなたのためにあなたの仕事をすることに非常に近づきます。

お役に立てれば。

于 2012-03-30T18:12:34.063 に答える
0

もう1つの一般的な答えは、学生の名前や名前などの文字列データを含む列で何かを検索する場合は、それらの列にインデックスを付けることをお勧めします。

これにより、結果の取得速度が向上します。

于 2012-03-30T18:34:58.703 に答える
0

を使用してすべてのクエリを実行することから始める必要がありますEXPLAIN。それはあなたにいくつかのポインタを示すはずです。

ただし、経験則を求めている場合は、これが一般的なガイドラインになります。

  • ステートメントFOREIGN KEYにあるインデックス列JOIN
  • WHERE条件で使用されるすべての列にインデックスを付ける
  • で使用されるすべての列にインデックスを付けるORDER BY

また、VARCHAR検索がたくさんあるようです。いくつかの追加の正規化も有益な結果をもたらす可能性があります。level_id名前を検索する方が簡単ですlevel

mysql_*また、補足として、古代の関数の使用を中止してください。それらは10歳以上であり、もはや維持されておらず、非推奨にするプロセスはすでに始まっていました。代わりに、PDOまたはMySQLiでプリペアドステートメントの使用を開始する必要があります。APIを使用して新しいコードを記述しないでください。mysql_*

于 2012-03-30T20:00:12.540 に答える