高性能索引策略一

高效的选择和使用索引有很多方式,有的是针对特殊案例的优化方法,有的则是针对特定行为的优化,使用哪个索引,以及如何评估选择不同索引的性能影响的技巧,则需要持续不断地学习。(本文章需要一定索引基础)

1.索引要是独立的列

  “独立的列”是指索引列不能是表达式的一部分,也不能是函数的参数。例如,下面这个查询无法使用actor_id列的索引

    mysql>SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5;

  凭肉眼很容易看出WHERE中的表达式其实等价与 actor_id = 4,但是MySQL无法自动解析这个方程式。这完全是用户行为。我们应该养成简化WHERE条件的习惯,始终将索引列单独放在比较符号的一侧

  下面是另一个常见的错误:

    mysql>SELECT ...  WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col) <= 10;

2.前缀索引和索引的选择性

  索引的选择性:

    索引的选择性是指   不重复的索引值(也称之为基数)和数据表记录总数(#T)的比值,范围从1/#T到1之间。索引的选择性越高则查询效率越高。唯一索引的选择性是一,这是最好的索引选择性,性能也是最好的。

    对于BLOB、TEXT或者很长的VARCHAR类型的列。必须使用前缀索引,因为mysql不允许索引这些列的完整长度。

    前缀索引选择前缀长度的诀窍在于选择足够长的前缀以保证较高的选择性,通知用不能太长(一遍节约空间),足够长的长度以使得前缀索引的选择性接近于索引的整个列。

原文地址:https://www.cnblogs.com/skl-bobo/p/10411577.html

时间: 2024-10-06 03:19:13

高性能索引策略一的相关文章

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

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

高性能索引-高性能索引策略

1.独立的列 如果查询中的列不是独立的,则MySql就不会使用索引."独立的列"是指索引列不能是表达式的一部分,也不能是函数的参数. 2.前缀索引和索引的选择性 对于很长字符列,可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引的效率.但是会降低索引的选择性.索引的选择性是指:不重复的索引值(也称基数)和数据表的总记录数的比值.索引的选择性越高则查询效率越高.诀窍在于选择足够长的前缀以保证较高的选择性,同时又不能太长(以便节省空间).前缀索引是一种能使索引更小.更快的有效办

高性能索引-高性能索引策略二

1.覆盖索引 索引是一种查找数据的高效方式,如果MySQL可以使用索引来直接获取列的数据,这样就不再需要读取数据行.如果一个索引包含所有需要查询的字段的值,就称之为"覆盖索引".覆盖索引具有以下好处: 索引条目通常远小于数据行大小,所以如果只需要读取索引,就会极大的减少数据的访问. 索引是按列值顺序存储的,所以对I/O密集型的范围查询会比随机从磁盘读取每一行数据的I/O要少的多. 一些存储引擎如MyISAM在内存只会缓存索引. 由于InnoDB的聚族索引,覆盖索引对InnoDB非常有用

高性能索引策略

1.独立的列 一些查询不当的使用索引,或者使得MySOL无法使用已有的索引.如果查询中的列不是独立的,则MySOL就不会使用索引."独立的列"是指索引列不能是表达式的一部分,也不能是函数的参数. 例如:mysql>select id from student where id+1=5;,就无法使用id列的索引 凭肉眼很容易看出where 中的表达式其实等价以id=4,但是mysql无法自动解析这个方程式.这完全是用户行为,我们应该始终将索引列单独放在比较符号的一侧. 2.前缀索引

[MySQL-笔记]创建高性能索引

索引,MySQL中也叫"键",是存储引擎中用于快速找到记录的一种数据结构,具体的工作方式就像书本中的索引一样,但是具体的实现方式会有差别. 一.索引分类 B-Tree索引: 优点: MyISAM中,索引根据数据的物理位置引用被索引的行,InnoDB中根据主键引用被索引的行. B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点开始进行搜索. B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据. 一般来说,B-Tree可以

第五章:创建高性能索引(上)

索引是存储引擎用于快速找到记录的一种数据结构,这也是索引的基本功能.在MySQL中也叫"键key".良好的性能少不了索引.换句话说,索引优化能够将查询性能轻松提高几个数量级. 1. 索引基础 select first_name from actor where actor_id = 5; 运行上面的查询:如果在actor_id列上有索引,MySQL将使用该索引去查找actor_id为5的列,也就是说:MySQL先在索引上按值查找,然后返回包含该值的数据行. 索引可以包含一个或多个列,列

高性能的索引策略(上)

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

建立高性能索引

(1)隔离列 如果在查询中没有隔离索引的列,mysql通常不会使用索引."隔离"列意味着它不是表达式的一部分,也没有位于函数中. 如以下的查询将不会使用actor_id上的索引 1 mysql>select * from actor where actor_id +1 = 5 我们虽然很容易的看出actor_id=4但是mysql却不会帮你解方程. 例如 1 mysql>select ... wher date_col >=TO_DAYS(CURRENT_DATE)

mysql之高性能索引

mysql之高性能索引 当db的量达到一定数量级之后,每次进行全表扫描效率就会很低,因此一个常见的方案是建立一些必要的索引作为优化手段,那么问题就来了: 那么什么是索引呢? 索引的实现原理是怎样的? 我们通常说的聚集索引,非聚集索引的区别是什么? 如何创建和使用索引呢? I. 索引介绍 MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构.简而言之,索引是数据结构 1. 几种树的结构 a. B+树 单来说就是一种为磁盘或者其他存储设备而设计的一种平衡二叉树,在B+tree中所