MySQL常见问题解答:如何创建MySQL或MariaDB数据库表索引?
下面是如何在MySQL数据库表上创建索引的例子,在这个特定的例子中,我的表使用了InnoDB数据库引擎,但是,这并不重要,它只是一个支持外键关系的MySQL数据库引擎。
首先,这个是一个MySQL表的SQL定义,我已经命名为ftp_files :CREATE TABLE ftp_files (
id int unsigned auto_increment not null,
ftp_username varchar(32),
ftp_command varchar(4), # STOR, DELE, RNFR, RNTO
ftp_root_dir varchar(1024), # ex: /ftp/customer1/file1.pdf
file_name varchar(1024) not null,
file_size_bytes bigint unsigned not null,
primary key (id)
) ENGINE=InnoDB;
很多人喜欢在CREATE TABLE语句中创建索引,但是,我更喜欢在CREATE TABLE语句之后添加索引,然后显示CREATE INDEX定义。
如何创建多列MySQL表索引
获取到索引,在定义表之后,我添加了以下代码行,以便在ftp_files数据库表中创建索引:CREATE INDEX idx_ftp_files_command_and_dir
ON ftp_files(ftp_command, ftp_root_dir);
这将在ftp_command和ftp_root_dir这两个字段上创建索引,这个索引将提高针对这些字段运行的查询的性能,在我的例子中,我有一系列针对此表运行的"worker"程序,继续运行如下的查询:SELECT * FROM ftp_files
WHERE ftp_command='STOR'
AND ftp_root_dir='/ftp/customer1'
因为我知道这个表会很大,因为我知道这个查询每天运行数千次,响应时间很重要。
如何创建单列索引
我已经展示了如何在MySQL数据库表上创建多列索引,为完整起见,我想我还应该展示如何创建一个单列索引,这实际上更简单:CREATE INDEX idx_ftp_files_username
ON ftp_files(ftp_username);
如果我正在对此字段运行查询,则这个索引将很有用,如下所示:SELECT * FROM ftp_files
WHERE UPPER(ftp_username)='FRED'
了解更多信息
有关创建MySQL索引的更多信息,我推荐MySQL CREATE INDEX的文档页面。