1

请您帮助我如何将其包含 INDEXES在我的表格中,我已经在几个教程中阅读过它,但仍然无法在我的数据库中实现它。为了提高我的数据库的效率:我已经安装php_apc.dll在 wampserver 上,它更快一点,我也尽量避免 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.....然后 是SELECTFROMMAINTABLESTUDENTSCOURSES

感谢您的耐心和时间。我最欣赏它。谢谢。

**查询示例"

                   $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 子句中使用的内容上。这太笼统了,以至于我预计会因为这样说而受到抨击,但一般性问题会产生一般性答案。

更具体的是您显示您的表结构并实际显示一两个查询。但是,它与我们为您做的工作非常接近。

希望这可以帮助。

于 2012-03-30T18:12:34.063 回答
0

您应该首先使用 运行所有查询EXPLAIN。那应该给你一些指示。

但是,如果您要求经验法则,这将是一般准则:

  • 语句中FOREIGN KEY的索引列JOIN
  • WHERE索引条件中使用的所有列
  • 索引中使用的所有列ORDER BY

似乎还有很多 VARCHAR 搜索。一些额外的标准化也可能会产生有益的结果。level_id然后搜索名称更容易level

另外,作为旁注:请停止使用古老的mysql_*功能。它们已有 10 多年的历史,不再维护,并且已经开始弃用它们的过程。相反,您应该开始使用PDOMySQLi准备好的语句。不应该使用API编写新代码。mysql_*

于 2012-03-30T20:00:12.540 回答
0

另一个普遍的答案是,如果您在包含字符串数据(如学生的名字或姓氏)的列中搜索某些内容,我建议您在这些列上放置索引。

这将提高检索结果的速度。

于 2012-03-30T18:34:58.703 回答