Php 关于如何为我的数据库编制索引的问题

Php 关于如何为我的数据库编制索引的问题,php,mysql,optimization,indexing,database-optimization,Php,Mysql,Optimization,Indexing,Database Optimization,我需要你帮助我如何在我的表中包含索引,我在几篇教程中都读过,但仍然无法在我的数据库中实现它。要提高我的数据库的效率,请执行以下操作: 我已经在wampserver上安装了php\u apc.dll,而且速度更快,我还尝试避免使用SELECT* 在我需要的查询中。但是如何实现索引是我的问题。如果您能指出索引的必要位置,我将非常高兴 这是我的数据库模式 Database: RESULTS ------------------- Table: STUDENTS - student

我需要你帮助我如何在我的表中包含
索引
,我在几篇教程中都读过,但仍然无法在我的数据库中实现它。要提高我的数据库的效率,请执行以下操作: 我已经在wampserver上安装了
php\u apc.dll
,而且速度更快,我还尝试避免使用
SELECT*
在我需要的查询中。但是如何实现
索引是我的问题。如果您能指出
索引的必要位置,我将非常高兴

这是我的数据库模式

  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)
我的大部分问题都是围绕
插入
主表
学生
。。。。。然后从
主表
学生
课程

谢谢你的耐心和时间。我非常感激。 谢谢

**查询示例”

$query2=mysql\u query(“选择名字,姓氏
来自学生
其中matric_no=“$matric_no.”);
($row2=mysql_fetch_数组($query2));
$query3=mysql\u query(“选择SUM(c.课程单元)作为'TOTAL'
从主表中选择m
以学生为中心的内部连接
m、 matric_no=s.matric_no
内部连接课程为c ON
m、 课程代码=c.课程代码
其中m.matric_no=“$matric_no.”
而m.level=“$level.”)或
die(mysql_error());
$query4=mysql\u查询(“选择c.课程\u单位,m.分数
从主表中选择m
以学生为中心的内部连接
m、 matric_no=s.matric_no
内部连接课程为c ON
m、 课程代码=c.课程代码
其中m.matric_no=“$matric_no.”
m.level=“$level.”)
或者死(mysql_error());
$query5=mysql\u查询(“选择c.课程\u单位,m.分数
从主表中选择m
以学生为中心的内部连接
m、 matric_no=s.matric_no
内部连接课程为c ON
m、 课程代码=c.课程代码
其中m.matric_no='“$matric_no.”)或die(mysql_error());
$query6=mysql\u query(“选择SUM(c.课程单元)作为'TOTAL'
从主表中选择m
以学生为中心的内部连接
m、 matric_no=s.matric_no
内部连接课程为c ON
m、 课程代码=c.课程代码
其中m.matric_no='“$matric_no.”)或die(mysql_error());
$query7=mysql\u query(“选择m.课程代码作为‘课程代码’,选择c.课程标题作为‘课程标题’”
,c.课程单位为“单位”,
m、 分数为“分数”,m级为“分数”
从主表中选择m
以学生为中心的内部连接
m、 matric_no=s.matric_no
内部连接课程为c ON
m、 课程代码=c.课程代码
其中m.matric_no=“$matric_no.”
m.level=“$level.”)
或者死(mysql_error());
$number\u cols=mysql\u num\u字段($query7);
$query8=mysql\u查询(“选择m.score,m.course\u代码
从主表中选择m
以学生为中心的内部连接
m、 matric_no=s.matric_no
内部连接课程为c ON
m、 课程代码=c.课程代码
其中m.matric_no=“$matric_no.”
m.score>=0且m.score<40”)或死亡(mysql_error());
$query9=mysql\u查询(“选择m.grade,m.course\u代码
从主表中选择m
以学生为中心的内部连接
m、 matric_no=s.matric_no
内部连接课程为c ON
m、 课程代码=c.课程代码
其中m.matric_no=“$matric_no.”
和m.grade=‘AR’)
或者死(mysql_error());

请原谅我的格式设置。我是从手机上键入的。谢谢您的时间。

这有点太笼统了,在这里无法很好地回答,但我给您的指导是将重点放在WHERE子句上-如果您在WHERE中使用了很多内容,请在其上放置索引,这将使这些查询更快。此外,如果您进行任何连接,请在您需要的内容上放置索引在你的ON从句中使用。这太笼统了,我想说出来会受到攻击,但一般的问题产生一般的答案

更具体的方法是显示表结构并实际显示一两个查询,但这样就非常接近我们为您完成的工作


希望这能有所帮助。

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


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

您应该首先使用运行所有查询。这将向您显示一些指针

但是,如果你要求的是经验法则,这将是一般的指导原则:

  • JOIN
    语句中的
    外键
    列编制索引
  • 索引
    中使用的所有列,其中
    条件
此外,似乎还有很多VARCHAR搜索。一些额外的搜索可能也会给出有益的结果。搜索
level\u id
比搜索
level
name更容易

另外,作为旁注:请停止使用古老的
mysql\u*
功能。它们已经有10多年的历史了,不再维护,并且正在弃用。相反,你应该开始使用or。不应该编写新的co
                   $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());