Please i need your help with how to include INDEXES in my tables, i’ve read about it in several tutorials but still cant implement it on my database . To increase the efficiency of my database:
I have installed php_apc.dll on the wampserver and it’s faster a bit, I have also tried to avoid the use of SELECT * in my queries where neccessary. But how to implement
INDEX is my problem. I’ll be glad if you can please point out where it’ll be nesseccary to INDEX.
Here is my database schema
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)
Most of my queries revolve round
INSERT INTO MAINTABLE , STUDENTS ….. then SELECT FROM MAINTABLE , STUDENTS and COURSES
Thank you for your patience and time. I most appreciate it.
Thanks.
**EXAMPLES OF QUERIES”
$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());
Please forgive my formating. I typed from a mobile. Thank you for your time.
You should begin by running all queries with
EXPLAIN. That should show you some pointers.But if you are asking for a rule of thumb, this would be the general guideline:
FOREIGN KEYinJOINstatementsWHEREconditionsORDER BYAlso there seem to be a lot of VARCHAR searches. Some additional normalization might give beneficial results too. It is easier to search for
level_idthen forlevelname.Also, as a side note: please stop using the ancient
mysql_*function. They are 10+ years old, no longer maintained and the process of making them deprecated had already begun. Instead you should start using prepared statements with PDO or MySQLi. One should’t write new code withmysql_*API.