我需要你的帮助,如何在我的表中包含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)
我的大部分疑问都围绕着
INSERT
INTO MAINTABLE
,STUDENTS
.....然后SELECT
来自MAINTABLE
,STUDENTS
和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());
请原谅我的格式化。我从手机输入。感谢您的时间。
答案 0 :(得分:3)
这有点过于笼统,不能在这里得到很好的解答,但我对你的指导是关注你的WHERE子句 - 如果你在WHERE中使用了很多东西,那么就在它上面放一个索引,它会使这些查询更快。此外,如果您进行任何连接,请将索引放在ON子句中使用的内容上。这太笼统了,我希望能够说出来,但是一般性的问题都会引起一般性的回答。
更具体的是你展示你的表结构并实际显示一两个查询。但是接下来我们为你做的工作非常接近。
希望这有帮助。
答案 1 :(得分:0)
另一个一般的答案是,如果您在包含学生姓名或姓氏等字符串数据的列中搜索某些内容,我建议您在这些列上添加索引。
这会提高检索结果的速度。
答案 2 :(得分:0)
您应首先使用EXPLAIN
运行所有查询。那应该会给你一些指示。
但如果你要求经验法则,这将是一般准则:
FOREIGN KEY
语句中JOIN
的索引列WHERE
条件ORDER BY
此外,似乎还有很多VARCHAR搜索。一些额外的normalization也可能会带来有益的结果。搜索level_id
然后搜索level
名称会更容易。
另外,作为旁注:请停止使用古老的mysql_*
功能。它们已有10年以上的历史,不再维护,并且不推荐使用它们had already begun。相反,您应该开始使用prepared statements或PDO MySQLi。不应该使用mysql_*
API编写新代码。