建立索引的规则

数据库索引优化策略
本文介绍了数据库索引的优化规则,包括何时及如何创建索引,以提高查询效率并减少不必要的资源消耗。涵盖主键、外键索引、复合索引的选择及数量限制等关键点。

建立索引常用的规则如下:  

1、表的主键、外键必须有索引;  

2、数据量超过300的表应该有索引; 

3、经常与其他表进行连接的表,在连接字段上应该建立索引;   

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;  

5、索引应该建在选择性高的字段上;   

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;  

 7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:    A、正确选择复合索引中的主列字段,一般是选择性较好的字段;    B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;    C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;    D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;    E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;   

8、频繁进行数据操作的表,不要建立太多的索引;   

9、删除无用的索引,避免对执行计划造成负面影响;    以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充 分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的 复合索引, 在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大

10 一个表一般最多建5个索引

 

在数据库和搜索引擎中添加索引是优化查询性能的重要手段,其规则和方法需结合具体场景进行选择和实现。 ### 添加索引规则 1. **选择合适的字段** 在频繁查询、排序或分组的字段上建立索引,例如主键、外键或经常用于条件查询的字段。对于低选择性的字段(如性别、状态等枚举值较少的字段),建立索引的意义不大,因为索引的选择性越高,查询效率提升越明显[^1]。 2. **避免过多索引** 每个索引都会占用磁盘空间并影响数据的插入、更新和删除性能。因此,在创建索引时应权衡查询与更新的需求,避免创建不必要的索引[^1]。 3. **组合索引的使用** 多个字段联合查询时,可以使用组合索引(复合索引)。组合索引遵循最左前缀原则,即查询条件中必须包含索引的最左字段,否则索引将不会被使用。例如,`idx_name_age` 是 `(name, age)` 的组合索引,则查询条件 `WHERE name = 'John'` 会使用该索引,而 `WHERE age = 30` 则不会[^1]。 4. **索引类型的选择** 根据数据特征和查询需求选择合适的索引类型。例如: - **B+树索引**:适用于范围查询、排序和等值查询,是 MySQL 默认的索引类型[^2]。 - **哈希索引**:适用于等值查询,不支持范围查询和排序。 - **全文索引**:适用于文本内容的模糊匹配,常见于搜索引擎中。 5. **索引维护** 对于频繁更新的表,应定期检查和优化索引,避免索引碎片影响性能。例如,MySQL 提供了 `OPTIMIZE TABLE` 命令来整理表和索引碎片。 ### 数据库中添加索引的方法 在数据库中,通常通过 SQL 语句来添加索引,以下以 MySQL 为例说明常用方法: 1. **为现有表添加索引** 使用 `ALTER TABLE` 或 `CREATE INDEX` 语句: ```sql -- 使用 ALTER TABLE 添加索引 ALTER TABLE `bus_shoool.student_recode` ADD INDEX `idx_created_time` (`created_time`) USING BTREE; -- 使用 CREATE INDEX 添加索引 CREATE INDEX `idx_name` ON `users` (`name`); ``` 2. **创建表时定义索引** 在 `CREATE TABLE` 语句中直接指定索引: ```sql CREATE TABLE `users` ( `id` INT PRIMARY KEY, `name` VARCHAR(50), `email` VARCHAR(100), INDEX `idx_name` (`name`) ); ``` 3. **删除索引** 当索引不再需要时,可以使用以下语句删除: ```sql -- 使用 ALTER TABLE 删除索引 ALTER TABLE `users` DROP INDEX `idx_name`; -- 使用 DROP INDEX 删除索引 DROP INDEX `idx_email` ON `users`; ``` ### 搜索引擎中添加索引的方法 在搜索引擎中,索引的构建通常涉及全文检索引擎(如 Elasticsearch、Solr 等)的配置。以 Elasticsearch 为例: 1. **定义映射(Mapping)** 在创建索引时定义字段的索引方式: ```json PUT /users { "mappings": { "properties": { "name": { "type": "text" }, "email": { "type": "keyword" } } } } ``` 2. **更新索引结构** Elasticsearch 不支持直接修改已有字段的映射,通常需要创建新索引并重新导入数据。 3. **添加文档数据** 添加文档时,Elasticsearch 会自动根据映射构建倒排索引: ```json POST /users/_doc/1 { "name": "John Doe", "email": "john@example.com" } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值