MySQL建立索引是提高查询效率的一种常用手段,但是如果建立不当可能会造成反效果。下面介绍一些建立索引的技巧。
1. 选择合适的数据类型
CREATE TABLE `my_table` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(50) NOT NULL,`age` TINYINT(4) NOT NULL,PRIMARY KEY (`id`),INDEX `idx_name` (`name`),INDEX `idx_age` (`age`));
在上面的例子中,`name`字段建立了索引,但是使用的是`VARCHAR`类型,可能会导致索引长度过长,不利于查询。如果`name`字段的内容较少,可以改为`CHAR`类型。
2. 组合索引
CREATE TABLE `my_table` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(50) NOT NULL,`age` TINYINT(4) NOT NULL,PRIMARY KEY (`id`),INDEX `idx_name_age` (`name`, `age`));
在上面的例子中,`name`和`age`字段组合成了索引,相比单独建立两个索引,可以减少IO操作,提高查询效率。
3. 不建议在大字段上建立索引
CREATE TABLE `my_table` (`id` INT(11) NOT NULL AUTO_INCREMENT,`content` TEXT NOT NULL,PRIMARY KEY (`id`),FULLTEXT INDEX `idx_content` (`content`));
在上面的例子中,`content`字段建立了全文索引,如果使用普通索引,可能会导致索引长度过长,不利于查询,并且会增加索引文件的大小,影响查询速度。
4. 避免重复索引
CREATE TABLE `my_table` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(50) NOT NULL,`age` TINYINT(4) NOT NULL,PRIMARY KEY (`id`),INDEX `idx_name` (`name`),INDEX `idx_age` (`age`),INDEX `idx_name_age` (`name`, `age`));
在上面的例子中,`idx_name_age`索引包含了`idx_name`和`idx_age`两个索引的内容,可以避免重复索引。
总结:
在建立索引时,需要根据具体的业务场景和数据类型选择合适的建立方式,避免重复索引和大字段索引,可以提高MySQL的查询效率。