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());