首页 数据库 mysql教程 mysql 优化(2)索引优化策略

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

Dec 29, 2016 pm 04:06 PM

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)索引优化策略的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
如何优化MySQL数据库的性能? 如何优化MySQL数据库的性能? Sep 11, 2023 pm 06:10 PM

如何优化MySQL数据库的性能?在现代信息时代,数据已经成为企业和组织的重要资产。作为最常用的关系型数据库管理系统之一,MySQL在各行各业都广泛地应用着。然而,随着数据量的增长和负载的增加,MySQL数据库的性能问题也逐渐凸显。为了提高系统的稳定性和响应速度,优化MySQL数据库的性能是至关重要的。本文将介绍一些常见的MySQL数据库性能优化方法,帮助读者

如何通过索引优化PHP与MySQL的跨表查询和跨数据库查询? 如何通过索引优化PHP与MySQL的跨表查询和跨数据库查询? Oct 15, 2023 am 09:57 AM

如何通过索引优化PHP与MySQL的跨表查询和跨数据库查询?引言:在面对需要处理大量数据的应用程序开发中,跨表查询和跨数据库查询是不可避免的需求。然而,这些操作对于数据库的性能来说是非常消耗资源的,会导致应用程序变慢甚至崩溃。本文将介绍如何通过索引优化PHP与MySQL的跨表查询和跨数据库查询,从而提高应用程序的性能。一、使用索引索引是数据库中的一种数据结构

如何通过MySQL对AVG函数优化来提高性能 如何通过MySQL对AVG函数优化来提高性能 May 11, 2023 am 08:00 AM

如何通过MySQL对AVG函数优化来提高性能MySQL是一款流行的关系型数据库管理系统,其中包含了许多强大的函数以及功能。其中AVG函数被广泛使用在计算平均值的情形,但是由于这个函数需要遍历整个数据集,所以在大规模数据的情况下会导致性能问题。本文将详细介绍如何通过MySQL对AVG函数进行优化,从而提高性能。1.使用索引索引是MySQL优化中最重要的一部分,

如何通过索引优化PHP与MySQL的数据排序和数据分组的效率? 如何通过索引优化PHP与MySQL的数据排序和数据分组的效率? Oct 15, 2023 pm 04:00 PM

如何通过索引优化PHP与MySQL的数据排序和数据分组的效率?在开发Web应用过程中,经常需要对数据进行排序和分组操作。而对于PHP与MySQL之间的数据排序和数据分组操作,我们可以通过索引来优化其效率。索引是一种数据结构,用于提高数据的检索速度。它可以加快数据的排序、分组以及查找操作。下面我们将介绍如何通过索引来优化PHP与MySQL的数据排序和数据分组的

如何通过索引提升PHP与MySQL的缓存命中率和数据库查询效率? 如何通过索引提升PHP与MySQL的缓存命中率和数据库查询效率? Oct 15, 2023 pm 01:15 PM

如何通过索引提升PHP与MySQL的缓存命中率和数据库查询效率?引言:在开发网站和应用程序时,PHP与MySQL是常用的组合。然而,为了优化性能和提高用户体验,我们需要关注数据库查询的效率和缓存的命中率。其中,索引是提高查询速度和缓存效率的关键。本文将介绍如何通过索引来提升PHP与MySQL的缓存命中率和数据库查询效率,并给出具体的代码示例。一、为什么要使用

基于TokuDB引擎的MySQL优化:提升写入和压缩性能 基于TokuDB引擎的MySQL优化:提升写入和压缩性能 Jul 25, 2023 pm 11:45 PM

基于TokuDB引擎的MySQL优化:提升写入和压缩性能引言:MySQL作为一种常用的关系型数据库管理系统,在大数据时代的背景下,面临着越来越高的写入压力和存储需求。为了应对这一挑战,TokuDB引擎应运而生。本文将介绍如何利用TokuDB引擎来提升MySQL的写入性能和压缩性能。一、什么是TokuDB引擎?TokuDB引擎是一种面向大数据的、用于处理高写入

如何实现MySQL底层优化:SQL语句高级优化的技巧和最佳实践 如何实现MySQL底层优化:SQL语句高级优化的技巧和最佳实践 Nov 08, 2023 pm 04:32 PM

MySQL是一种广泛使用的关系型数据库管理系统,常用于Web应用程序的开发和数据存储。在实际应用中,对MySQL的底层优化尤为重要,其中SQL语句的高级优化是提升数据库性能的关键所在。本文将介绍实现MySQL底层优化的一些技巧和最佳实践,以及具体的代码示例。确定查询条件在编写SQL语句时,首先要明确定义查询条件,避免使用无限制的通配符查询,即避免使用"%"开

数据库搜索效果优化的Java技巧经验分享与总结 数据库搜索效果优化的Java技巧经验分享与总结 Sep 18, 2023 am 09:25 AM

数据库搜索效果优化的Java技巧经验分享与总结摘要:数据库搜索是大多数应用程序中常见的操作之一。然而,当数据量庞大时,搜索操作可能变得缓慢,从而影响应用程序的性能和响应时间。本文将分享一些Java技巧,帮助优化数据库搜索效果,并提供具体的代码示例。使用索引索引是数据库中提高搜索效率的重要组成部分。在进行搜索操作之前,确保在需要搜索的列上创建了合适的索引。例如

See all articles