我有几张桌子,我需要加入它们。其中一张表有 200k 条记录(这是一个学生表)。另一个有超过 100 万条记录。
我需要按学生入学年份过滤。在这种情况下,入学年份由学生证的前两位数字给出。学生证有 6 位数字。
例如: - 1997 年的学生 ID 为 97XXXX - 2005 年的学生 ID 为 A5XXXX - 2011 年的学生 ID 为 B1XXXX
因此,我采用该字段并使用 LIKE 语句。
SELECT * FROM STUDENT WHERE id LIKE '97%'
... 对于 1997 年的学生。
事实证明,这个查询花费了大量的时间。这是该特定表的 EXPLAIN 输出:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
--------------------------------------------------------------------------------------------+
| 1 | SIMPLE | STUDENTS | range | ID | ID | 11 | NULL| 6505 | Using where; Using index; Using temporary; Using filesort |
将年份作为数值转换或添加额外的列到数据库是否合理?这会使查询更快吗?
非常感谢!