高性能的索引策略4-冗余和重复索引

如果创建了索引(A,B),再创建索引(A)就是荣誉索引,因为索引(A)是索引(A,B)的前缀索引,因此索引(A,B)可以当做索引(A)来使用【仅仅针对B Tree索引来讲】

针对InnoDB,ID为主键,索引(A)可当做 (A,ID)来使用,不用再创建索引(A,ID)

表中的索引越多,则insert 、update、delete的操作会变得越慢,一般来讲,会选择扩展现有的索引,而不是 增加新的索引。

原文地址:https://www.cnblogs.com/wooluwalker/p/12237337.html

时间: 2024-10-07 05:54:41

高性能的索引策略4-冗余和重复索引的相关文章

mysql重复索引、冗余索引、未使用索引的定义和查找

1.冗余和重复索引 mysql允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能.重复索引是指的在相同的列上按照相同的顺序创建的相同类型的索引,应该避免这样创建重复所以,发现以后也应该立即删除.但,在相同的列上创建不同类型的索引来满足不同的查询需求是可以的. 冗余索引和重复索引有一些不同,如果创建了索引(a,b),再创建索引(a)就是冗余索引,因为这只是前面一个索引的前缀索引,因此(a,b)也可以当作(a

高性能的索引策略(上)

高效的选择和使用索引有很多方式,其中有些事针对特殊案例的优化方法,有些则是针对特定行为的优化,使用哪个索引,以及如何评估选择不同索引性能影响的技巧,则需要持续不断的练习.接下来将介绍如何高效的使用索引. 独立的列 我们通常会看到一些查询不当的使用索引,或者是的MySQL无法使用已有的索引.如果查询中的列不是独立的,则MySQL就不会使用索引.“独立的列”是指索引列不能是表达式的一部分,也不能是函数的参数. 例如,下面的这个查询无法使用actor_id的索引: SELECT actor_id FR

MySQL索引背后的之使用策略及优化(高性能索引策略)

为了讨论索引策略,需要一个数据量不算小的数据库作为示例.本文选用MySQL官方文档中提供的示例数据库之一:employees.这个数据库关系复杂度适中,且数据量较大.下图是这个数据库的E-R关系图(引用自MySQL官方手册): 图12 MySQL官方文档中关于此数据库的页面为http://dev.mysql.com/doc/employee/en/employee.html.里面详细介绍了此数据库,并提供了下载地址和导入方法,如果有兴趣导入此数据库到自己的MySQL可以参考文中内容. 最左前缀原

高性能索引策略一

高效的选择和使用索引有很多方式,有的是针对特殊案例的优化方法,有的则是针对特定行为的优化,使用哪个索引,以及如何评估选择不同索引的性能影响的技巧,则需要持续不断地学习.(本文章需要一定索引基础) 1.索引要是独立的列 "独立的列"是指索引列不能是表达式的一部分,也不能是函数的参数.例如,下面这个查询无法使用actor_id列的索引 mysql>SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5; 凭肉眼很容易看出WHE

高性能的索引策略3-使用索引扫描做排序

mysql有两种方式生成有序结果: 通过排序操作 order by 按照索引顺序扫描(explain 出来的type 为 index) 扫描索引本身是很快的,因为只需要从一条索引记录移动到下一条索引记录即可.但是如果索引不能覆盖查询所需的全部列,那就不得不每扫描一条索引记录就得回表查询一次对应的行.这基本上就是随机IO. 因此,按照索引顺序读取数据的速度通常要比顺序全表扫描慢. 尽可能设计同一个索引技能满足排序,又可用于查找行. mysql使用索引对结果排序的前提: 索引的列顺序和order b

MySQL 重复索引探讨(持续更新中...)

资料参考:http://xiezhenye.com/2015/01/%E6%89%BE%E5%88%B0-mysql-%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%AD%E7%9A%84%E4%B8%8D%E8%89%AF%E7%B4%A2%E5%BC%95.html <一> 创建'有问题的'表 1.创建表test1 CREATE TABLE test1 (   id int(11) NOT NULL,   f1 int(11) DEFAULT NULL,   f2 in

mysql 优化策略(如何利用好索引)

命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c

谈谈 InnoDB引擎中的一些索引策略

如果我们在工作能够更好的利用好索引,那将会极大的提升数据库的性能. 覆盖索引 覆盖索引是指在普通索引树中可以得到查询的结果,不需要在回到主键索引树中再次搜索 建立如下这张表来演示覆盖索引: create table T ( id int primary key, age int NOT NULL DEFAULT 0, name varchar(16) NOT NULL DEFAULT '', index age(age)) engine=InnoDB; 我们执行select * from T w

MongoDB string字段索引策略总结

在学习MongoDB的索引时发现一个奇怪的问题,给一个string类型的field设置text索引,但是在查询的时候并没有使用索引.比如: db.tomcat_access_logs.ensureIndex( { url : 'text' }); db.tomcat_access.logs.find( { url : '1' } ).explain(); db.tomcat_access_logs.find( { url : /1/ } ).explain(); { "cursor"