匹配最左前缀:B-tree找到姓为tang的人

  匹配列前缀: 匹配某列的值的开头部分 查找姓氏以T开头的人

  匹配范围值:索引查找姓大于Tang小于zhu的人

  精确匹配一部分并且匹配某个范围的另外一部分:

  查找姓为Tang并且名字以字母K开头的人 精确匹配last_name列并且对

  first_name进行范围查询

  只访问索引的查询:B-tree支持只访问索引的查询,不会访问行

  B-tree局限性:(案例中索引顺序:last_name first_name dob )

  如果查找没有送索引列的最左边开始,没有什么用处,即不能查找所有叫Kang 的人,也不能找到所有出生在某天的人,因为这些列不再索引最左边,也不能使用该索引超找某个姓氏以特定字符结尾的人。

  不能跳过索引的列,即不能找到所有姓氏为Tang并且出生在某个特定日期的人,如果不定义first_name列的值,Mysql只能使用索引的第一列。

  存储引擎不能优化任何在第一个范围条件右边的列,比如查询是where last_name = 'Tang'AND first_name like 'K%' AND dob='1993-09-23' 访问只能使用索引头两列。

  由此可知 索引列顺序的重要性!

  目前只有Memory存储引擎支持显示的哈希索引,而且Memory引擎对我来说不常用,所以我们就轻描淡写的过了吧。

  Myisam支持空间索引,可以使用geometry空间数据类型。

  空间索引不会要求where子句使用索引最左前缀可以全方位索引数据,可以高效使用任何数据组合查找 配合使用mercontains()函数使用。

  fulltext是Myisam表特殊索引,从文本中找关键字不是直接和索引中的值进行比较。

  全文索引可以和B-Tree索引混用,索引价值互不影响。

  全文索引用于match against操作 而不是普通的where子句。

  通常索引几个字符,而不是全部值,以节约空间并得到好的性能,同时也降低选择性。

  索引选择性是不重复的索引值和全部行数的比值。高选择性的索引有好处,查找匹配过滤更多的行,唯一索引选择率为1最佳状态。

  blob列、text列及很长的varchar列,必须定义前缀索引,mysql不允许索引他们的全文。

  造数据

  #复制一份与cs_area表结构

  #插入1600数据

  #模拟真实数据

  #表area有name列 需要对name列前缀索引

  mysql中的数据类型_mysql数据库中的数据类型_数据类型mysql

  #计算得比值接近0.9350就好了

  mysql数据库中的数据类型_mysql中的数据类型_数据类型mysql

  #分别取 3 4 5位name值计算

  数据类型mysql_mysql中的数据类型_mysql数据库中的数据类型

  #可知name列添加5位前缀索引就可以了

  #Mysql不能在order by 或 group by查询使用前缀索引 也不能将其用作覆盖索引

  聚集索引不是一种单独的索引类型,而是一种存储数据的方式。

  Innodb 的聚集索引实际上同样的结构保存了B-tree索引和数据行,"聚集" 是指实际的数据行和相关的键值保存在一起,每个表只能有一个聚集索引,因此不能一次把行保存在两个地方。 (由于聚集索引对我来说不常用,我们就略过啦~)

  索引支持高效查找行,mysql也能使用索引来接收列的数据。这样不用读取行数据,当发起一个被索引覆盖的查询,explain解释器的extra列看到 using index。

  #满足条件:#

  # select 查询的字段必须 有索引全覆盖

  select last_name,first_name 其中 last_name 和first_name 必须都有索引

  #不能在索引执行like操作

  mysql排序结果的方式:使用文件排序 、 扫描有序的索引

  explain中的type列若为 "索引(Index)" 说明mysql扫描索引。单纯扫描索引很快,如果mysql没有使用索引覆盖查询 就不得不查找索引中发现的每一行。

  mysql能有为排序和查找行使用同样的索引,如表 user 索引 (uid,birthday ) 。

  使用排序索引:

  mysql中的数据类型_mysql数据库中的数据类型_数据类型mysql

  重复索引:类型相同,以同样的顺序在同样的列创建索引,比如在表user id列 添加 unique(id)约束 、id not null。

  primary key 约束 index(id),其实这些是相同的索引 !

  多余索引:如存在(A)索引 应该扩展它 满足 (A,B)索引

  (A,B)索引 (B)

  (A,B)索引 (A)

  (A,B) A最左前缀 (B,A) B最左前缀

  设计user表 字段:country、 state/region 、city 、sex 、age 、eye 、color 功能:支持组合条件搜索用户 支持用户排序 用户上次在线时间

  不在选择性很差的列添加索引

  mysql数据库中的数据类型_mysql中的数据类型_数据类型mysql

  索引和表维护

  表维护三个目标:查找和修复损坏、维护精确的索引统计,并减少碎片

  check table 命令:确定表是否损坏,能抓到大部分表和索引错误

  repair table 命令:修复损坏的表

  myisamchk :离线修复工具

  analyze table cs_area 更新索引统计信息,便于优化器优化sql

  show index 命令检查索引的基数性

  mysql数据库中的数据类型_mysql中的数据类型_数据类型mysql

  myisam引擎 使用 optimize table 清除碎片 Innodb 引擎 使用 alter table .. engine = .. 重新创建索引

  正则化和非正则化

  实例:统计过去24小时发布的信息精确的数量

  周期创建可以得到没有碎片和全排序索引的高效表

  数据类型mysql_mysql数据库中的数据类型_mysql中的数据类型

  注意:此法会将数据清除,只是得到一个没有碎片和高效的索引表。

  计数表:比如缓存用户朋友数量、文件下载次数 通常建立一个单独的表,以保持快速维护计数器。

  计划任务定期聚合函数查询,更新对应的字段。

  mysql中的数据类型_数据类型mysql_mysql数据库中的数据类型

最后修改:2024 年 08 月 01 日
如果觉得我的文章对你有用,请随意赞赏