0

我有几张桌子,我需要加入它们。其中一张表有 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 |

将年份作为数值转换或添加额外的列到数据库是否合理?这会使查询更快吗?

非常感谢!

4

1 回答 1

0

你有索引id吗?MySQL 应该能够使用这样的索引优化您的查询(如此所述)。

使用索引,您还可以尝试:

where id >= '97' and id < '98'
于 2013-05-08T02:33:02.900 回答