• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > Mysql-索引优化策略

Mysql-索引优化策略

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了Mysql,索引,优化策略等相关知识,希望本文的分享对您有所帮助
本节后边通过实际易懂的举例,来说明索引实际的触发,从而优化自己在加索引时使用的策略。

一.索引类型

1.1 B-tree索引

注: 名叫btree索引,大的方面看,都用的平衡树,但具体的实现上,各引擎稍有不同,

比如,严格的说,NDB引擎,使用的是T-tree,Myisam,innodb中,默认用B-tree索引

但抽象一下---B-tree系统,可理解为”排好序的快速查找结构”. 更多分析,见Mysql-索引-BTree类型【精简】


1.2 hash索引

在memory表里,默认是hash索引, hash的理论查询时间复杂度为O(1)

疑问: 既然hash的查找如此高效,为什么不都用hash索引?

答:

1:hash函数计算后的结果,是随机的,如果是在磁盘上放置数据,比如主键为id为例,那么随着id的增长, id对应的行,在磁盘上随机放置.

2: 不法对范围查询进行优化.

3: 无法利用前缀索引.比如 在btree中, field列的值“hellopworld”,并加索引,查询 xx=helloword,自然可以利用索引, xx=hello,也可以利用索引. (左前缀索引)。因为hash(‘helloword’),和hash(‘hello’),两者的关系仍为随机,其实就是因为HASH是精准的

4: 排序也无法优化.

5: 必须回行.就是说 通过索引拿到数据位置,必须回到表中取数据

二.btree索引的常见误区

2.1 在where条件常用的列上都加上索引

例: where cat_id=3 and price>100 ; //查询第3个栏目,100元以上的商品

误: cat_id上,和, price上都加上索引.

错: 只能用上cat_id或Price索引,因为是独立的索引结构,同时只能用上1个。详细排列叙述,请见Mysql-索引结构直观图解

529.png

2.2 多列索引上,索引发挥作用,需要满足左前缀要求.

误: 在多列上建立索引后,查询哪个列,索引都将发挥作用

以 index(a,b,c) 为例,

530.png

三.总结:

1.联合索引的顺序遵循左前缀原理,必须层层连贯,SQL语句中where条件没有前后关系, 如上边4,5查询举例

2.涉及到like < > 等范围查询,此查询后的索引用不上 如7

3.在1层层嵌套的前提下,用到了order排序,order排序不参加where条件,注意[where 字段a order by 字段a] 的问题,其实[order a ]假命题,因为已经 等于a 了还排哪门子序

4.在 select查询中的where,多个条件无顺序,但是索引添加时得注意顺序,同一。

5.group 在分组中的工作原理:先order_by 排序 ,创建临时表,如果建了索引,就能省去创建临时表,所以索引对group有效


以上就是Mysql-索引优化策略的内容,更多相关内容请关注微课江湖()!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2017-05-11MySQL5.6基本优化配置
  • 2018-12-05MySQL之——查询指定的数据库、表是否存在
  • 2018-12-05用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备
  • 2018-12-05解析Mysql存储引擎InnoDB和MyISAM几点区别
  • 2018-12-05解决Access中分组报表的问题
  • 2018-12-05mssql CASE,GROUP BY用法
  • 2018-12-05深入Mysql字符集设置分析
  • 2018-12-05谈谈SQL查询字段被包含语句问题
  • 2017-05-11一千行的MySQL学习笔记汇总
  • 2017-05-11you *might* want to use the less safe log_bin_trust_function_creators variable

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL中把varchar类型转为date类型方法详解_MySQL
    • MYSQL基础之连接MYSQL、修改密码、添加用户
    • MySQL压缩版安装配置的详情介绍
    • 大数据量分页存储过程效率测试附测试代码与结果
    • 怎样利用Hibernate来防止SQL注入的方法
    • MySQL使用游标数据实例教程
    • MySQL中SELECT+UPDATE处理并发更新问题解决方案分享
    • mysql使用workbench创建已有表类图
    • MySQL 最基本的SQL语法/语句
    • 存储过程的输出参数,返回值与结果集

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有