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

mysql 优化(2)索引优化策略

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

匿名通过本文主要向大家介绍了mysql优化,索引优化等相关知识,希望本文的分享对您有所帮助
1:索引类型

索引: 作用快速查询;

649.jpg

节点第1层 , 2的0次方

节点第1层 , 2的1次方

节点第3层 , 2的2次方

节点第4层 , 2的3次方

节点第5层 , 2的4次方

.。。。

。。。

。。。

节点第31层 , 2的32次方

加起来 42亿

也就是说 42 亿个数字 最多查 32 次就可以了

普通查询要查21亿次



这就是-----》 B-tree索引

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

比如,严格的说,NDB引擎,使用的是T-tree

Myisam,innodb中,默认用B-tree索引



但抽象一下---B-tree系统,可理解为”排好序的快速查找结构”.



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’),两者的关系仍为随机

4: 排序也无法优化.

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

------》回行查找 就说只是个字典的目录 必须再去实际翻页



2: btree索引的常见误区

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

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

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

错: 只能用上cat_id或Price索引,因为是独立的索引,同时只能用上1个.

alter table add index(cat_id)

alter table add index(price)

alter table add index(goods_id) ---------------------------同时只能用一个 所以。。。。 联合索引 把多个列看成整体的值

index(cat_id ,goods_name, price) --------------------------- 把多个列看成整体的值



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

误: 多列索引上,索引发挥作用,需要满足左前缀要求.
///做前缀要求

以 index(a,b,c) 为例,(注意和顺序有关)

语句

索引是否发挥作用

Where a=3

是,只使用了a列

Where a=3 and b=5

是,使用了a,b列

Where a=3 and b=5 and c=4

是,使用了abc

Where b=3 / where c=4

否

Where a=3 and c=4

a列能发挥索引,c不能

Where a=3 and b>10 and c=7

A能利用,b能利用, C不能利用

同上,where a=3 and b like ‘xxxx%’ and c=7

A能用,B能用,C不能用

为便于理解, 假设ABC各10米长的木板,河面宽30米.

精确匹配,则木板长10米,

Like,左前缀及范围查询,则木板长5米,



自己拼接一下,能否过河对岸,就知道索引能否利用上.

如上例中, where a=3 and b>10, and c=7,

A板长10米,A列索引发挥作用

A板正常接B板, B板索引发挥作用

B板短了,接不到C板,
C列的索引不发挥作用.

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

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

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

  • 基于MYSQL中优化的一些方法
  • MySQL的重装问题解决方法
  • 如何解决mysql重装失败方法介绍
  • mysql服务启动不了解决方案
  • mysql 无限级分类实现思路
  • mysql 判断记录是否存在方法比较
  • mysql 优化日记
  • MYSQL 优化常用方法
  • MySQL 优化设置步骤
  • Mysql调优之profile的使用方法

相关文章

  • 2018-12-05oracle下实现恢复一个丢失的数据文件的代码
  • 2018-12-05sql server 2005用户权限设置深入分析
  • 2018-12-05sqlserver 比较两个表的列
  • 2017-05-11101个MySQL的配置和优化的提示
  • 2017-05-11批量替换 MySQL 指定字段中的字符串
  • 2017-05-11innodb 库的备份注意点(由phpmyadmin引起的解决方案)
  • 2018-12-05MySQL避免索引列使用 OR 条件
  • 2018-12-05MySQL服务器默认安装之后调节性能的方法
  • 2017-05-11mysql存储过程 游标 循环使用介绍
  • 2018-12-05Mysql分析-show PROCESSLIST 的详情

文章分类

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

最近更新的内容

    • SQLServer 2008中SQL增强之一:Values新用途
    • MySQL事务处理基础入门
    • MySQL:reading initial communication packet问题解决方法
    • mysql字符集乱码问题解决方法介绍
    • mongoDB 多重数组查询的实例介绍
    • php程序员最常犯的11个mysql错误
    • 怎样利用Hibernate来防止SQL注入的方法
    • windows下重启mysql的方法
    • GreenPlum中日常SQL脚本
    • Mysql学习笔记(二)对表结构的增删改查

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

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