我们将在表格中做出哪些改变

时间:2014-10-08 12:31:10

标签: mysql

我在下面的问题中被问到一个我无法回答的问题。有人可以帮忙。

小学老师想要在MySQL数据库中存储她的名字,姓氏,出生日期,性别(0 =女性和1 =男性)以及每个学生的家庭电话号码。她想出了下表定义:

CREATE TABLE pupil(
pupil_id INT NOT NULL AUTO_INCREMENT,
first_name CHAR(50),
last_name CHAR(50),
date_of_birth CHAR(50),
gender INT,
phone_number CHAR(50),
PRIMARY_KEY (pupil_id)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;

她经常运行以下查询

select * from pupil where pupil_id = 2;
select * from pupil where first_name = 'John';
select * from pupil where first_name = 'John' and last_name = 'Doe';

您对此表做出哪些更改?为什么?

5 个答案:

答案 0 :(得分:1)

您应该在first_namelast_name列的表格中添加索引。

Syntax : CREATE INDEX `ind` ON `table`(`col`);

这将使索引列上的搜索更快。浏览这篇文章=> When to use indexes?MySQL's docs。基本上,您使用经常搜索的项目上的索引来提高性能。但请记住一件事:太多的索引会减慢表中的插入速度。因此,有效使用索引肯定会加快查询速度。

答案 1 :(得分:0)

我的回答是我会添加两个索引。一个用于first_name,另一个用于first_name,last_name。

答案 2 :(得分:0)

如果您经常根据名字或名字和姓氏进行查询,那么将它们编入索引可能是个好主意:

CREATE INDEX pupil_names_ind ON pupil (first_name, last_name);

话虽如此,你应该首先运行一个基准测试。如果表只有几百行,那么它们中的大多数都是缓存,并且索引它将是一种浪费的努力。

答案 3 :(得分:0)

你只想要一个索引

CREATE INDEX pupils_by_name ON pupil (first_name, last_name)

首先通过主键

优化查询(按id)

第二个查询(按名字)由pupils_by_name索引处理,因为它适合从左侧开始的索引列顺序,如果你想通过'last_name'字段优化查询,这个索引将不起作用,因为where子句中列的顺序必须与从左边开始的列的顺序匹配

thrid查询完全符合索引pupils_by_name

另外

date_of_birth CHAR(50)应为日期

性别INT应该是tinyint

答案 4 :(得分:0)

我会在first_name和last_name上创建索引(按此顺序)。这很重要。更多信息:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

然后我会将date_of_birth数据类型更改为日期