Mysql 索引优化

MySQL索引-索引优化 索引优化,主要包括应该建立索引的情况,不应该建立索引的情况,常见的索引优化方式,慢查询优化和深分页优化 阅读详情

1、索引的存储分类

MyISAM存储引擎的表数据和索引是自动分开存储的,各自是独一的一个文件

Innodb存储引擎的表数据和索引是存储在同一个表空间里面,但可以由多个文件构成。

Mysql 目前不支持函数索引,但是能对列的前面某一部分进行索引

例如name字段,可以只取name的前4个字符进行索引,可降低索引文件大小。

Mysql> create index ind_company_name on company(name(4));

说明:ind_company_name索引名,company表名


2、使用like的查询,后面如果是常量,并且%号不在第一个字符,索引才可能被用上

eg: Mysql> select * from t1 where id like "3%"; 推荐

      Mysql> select * from t1 where id like "3%"; 不推荐 (索引用不上)


3、如果对大的文本进行索引,使用全文索引而不使用like"%....%"


4、如果列名是索引,使用column_name is Null 将使用索引。

eg: Mysql> desc select * from company where name is null\G


5、存在索引但不使用索引


6、如果Mysql估计使用索引比全表扫描更慢,则不使用索引。


例如:如果列Key_part均匀的分布在1-100之间,查询时使用索引就不好。

eg:Mysql> select * from table_name where key_part>1 and key_part<90;


7、如果使用MEMORY/HEAP 表并且where条件中不适用“=”进行索引列,那么不会用到索引。Heap表只有在“=”的条件下会使用索引。


8、用or分割开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及的索引都不会被使用。


9、如果不是索引列的第一部分,那么查询中这个索引也不会被Mysql采用。

eg: Mysql> desc select * from sales where moneys=1\G

Moneys上面建有复合索引,但是moneys不是索引的第一列。


10、如果列类型是字符串,但是查询时把一个数值型常量复制给了一个字符型的列名name,那么虽然name列有索引,也不会使用。

eg: Mysql> desc select * from company where name=123\G  (字符串索引使用整形数据查询,不会使用索引)

      Mysql> desc select * from company where name="123"\G (使用上索引)


查看Mysql索引使用情况


Mysql> show status like 'Handle_read%';


如果索引正在工作,Handler_read_key的值将很高,这个值代表索引被使用次数。

Handler_read_rnd_next的值高意味着查询运行低效,并且应该建立索引补救。


2个简单实用的优化技巧

a、定期分析表和检查表

Mysql> ANALYZE  [LOCAL | NO_WRITE_TO_BINLOG] TABLE tab_name [,tab_name1]...;

本语句用于分析和存储表的关键字分布,分析结果可以使系统得到准确的统计信息。使SQL能够生成正确的行计划。

eg: Mysql> analyze table sales;

分析表的语法如下: (检查一个或多个表是否有错误)

Mysql> CHECK TABLE tab_name [,tab1_name]...[option]...option={QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

eg: Mysql> check table sales;


b、定期优化表

优化表的语法格式:

Mysql> OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] tab_name [,tab_name1]..

如果已经删除了表的一大部分,或者已经对含有可变长度行的表进行了很多的改动,则需要定期优化。

这个命令可以将表中的空间碎片进行合并,但是只对MyISAM、BDB和Innodb表起作用。

eg: Mysql> optimize table sales;   (不要在Mysql访问数大的情况下使用)


常用SQl的优化 

大批量插入数据

当用load命令导入数据的时候,适当设置可以提高导入速度

对于MyIASM存储引擎的表,可以用个一下方式快速导入大量数据

ALTER TABLE Tab_name DISABLE KEYS loading the data

ALTER TABLE Tab_name ENABLE KEYS

DISABLE KEYS 和 ENABLE KEYS 用来打开或关闭MyISAM表非唯一索引的更新,可以提高速度,对Innodb无效。

【MySQL】什么是索引?如何优化索引? 读完这篇文章,你会知道什么是索引?什么时候适合使用索引?什么时候不适合使用索引?如何优化索引? 阅读详情

相关推荐

Xilinx Blockset Counter计数器模块使用及参数配置

本文详细介绍了Simulink中Xilinx Blockset库Counter模块的使用以及参数说明。

白码王子小张的博客 1094

【MySQL】索引性能分析-demo

前言  SQL脚本CREATE TABLE `test03` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c1` char(10) DEFAULT NULL, `c2` char(10) DEFAULT NULL, `c3` char(10) DEFAULT NULL, `c4` char(10) DEFAULT NULL, `c5` ...

sms 1103

contextcapture多区块点云_多源点云数据融合的建筑物精细化建模

本文内容来源于《测绘通报》2020年第8期,审图号:GS(2020)3611号多源点云数据融合的建筑物精细化建模王树臻1, 郑国强1, 王光生1, 胡玉民2, 张德怀2, 亓伟3 ...

weixin_36301639的博客 1825

MySQL索引相关--demo

MySQL索引相关--demoB树与B+树:基本概念即对比MySQL索引组织表,与B+树的关系索引创建原则:举例无条件的查询有where条件where + sort B树与B+树: 基本概念即对比 MySQL索引组织表,与B+树的关系 索引创建原则: 由慢查评率决定 ----不是所有的慢查都需要优化 单表索引数目不能太多 常用慢查优化: 举例 无条件的查询 select * from … 1....

Shuo_W的博客 402

用STM32CubeMX和HAL库,5分钟搞定TB6612驱动直流电机(附完整代码)

本文详细介绍了如何使用STM32CubeMX和HAL库快速配置TB6612驱动直流电机,包括硬件连接、CubeMX工程配置、电机驱动逻辑实现及进阶优化技巧。通过图形化工具和代码示例,即使是新手也能在5分钟内完成电机调速系统的搭建,大幅提升开发效率。

weixin_26854829的博客 266

通俗讲解清楚光线追踪中的蒙特卡洛积分

彻底讲解光线追踪中的蒙特卡洛积分

qq_37366618的博客 1243

MySQL创建索引、重建索引、查询索引、删除索引

1、创建索引 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。 以下命令语句分别展示了如何创建主键索引(PRIMARY KEY)、 唯一索引(UNIQUE)、 全文索引(FULLTEXT)、 普通索引(INDEX)的方法。 mysql>ALTER TABLE `ta...

xinyuan的专栏 1万+

ROS2 - 乐动激光雷达 LD06

STL-06P 主要由激光测距核心,无线传电单元,无线通讯单元,角度测量单元、电机驱动单元和机械外壳组成。STL-06P 测距核心采用 DTOF 技术,可进行每秒 5000 次的测距。每次测距时,雷达发射出红外激光,激光遇到目标物体后被反射到单光子接收单元。

机器人控制与仿真应用 3485

MySQL索引优化总结

前言:相信大家都知道索引可以大大提高MySQL的检索速度,但是真正在平时工作中写SQL,真的会考虑到这条SQL如何能够用上索引提升执行效率?本篇博客详细的介绍了索引优化的20个原则,只要在工作中能够随时应用到,相信你写出的SQL能够命中索引,效率杠杠的。 一、索引的分类 1.1、普通索引、主键索引和唯一索引 1.2、聚集索引和非聚集索引 1.3、联合索引最左匹配原则 1.4、索引覆盖和回表 1.5、前缀索引 1.6、索引合并 1.7、索引下推 二、索引优化规则 查询的条...

何哥的博客 1万+

PCL 法向量夹角剔除错误匹配点对【2026最新版】

实现了一种简单的基于对应点法线角度的对应关系去除方法。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 41万+

全面解析智能座舱芯片参数:高通 (SA8295)vs 联发科,真实案例一行行讲给你听!

使用场景推荐芯片中低端车型 + 1屏导航语音SA8155P / MT8628(性价比高)中控+副驾+仪表+全景影像SA8255P / MT8678(性能强)高阶自动驾驶+域控融合SA8295P(顶级安全+算力)

weixin_43199439的博客 2076

MySQL索引优化

这里说一下几种常见优化索引的方法:前缀索引顾名思义就是使用某个字段中字符串的前几个字符建立索引,那我们为什么需要使用前缀来建立索引呢?使用前缀索引是为了减小索引字段大小,可以增加一个索引页中存储的索引值,有效提高索引的查询速度。在一些大字符串的字段作为索引时,使用前缀索引可以帮助我们减小索引项的大小。不过,前缀索引有一定的局限性,例如:覆盖索引是指 SQL 中 query 的所有字段,在索引 B+Tree 的叶子节点上都能找得到的那些索引,从二级索引中查询得到记录,而不需要通过聚簇索引查询获得,可以避免回表

mz474920631的博客 1万+

Python 爬虫实战:付费 IP 代理使用技巧与爬虫稳定性优化

付费IP代理实战指南:突破反爬与优化稳定性 本文系统讲解付费IP代理在爬虫项目中的高效应用方法。首先对比分析静态代理、动态代理和隧道代理的优缺点及适用场景,推荐高并发项目优先选择隧道代理。然后详细演示了主流代理服务商的集成方法,包括代理池的自动更新和健康检测机制。核心部分重点介绍了爬虫稳定性优化策略,如智能重试、频率控制和请求间隔优化等关键技术。最后通过压力测试验证优化效果,并提供成本控制方案,包括代理复用、错峰爬取等实用技巧。通过本教程,开发者可有效解决高并发爬虫中的IP封禁问题,显著提升系统稳定性和抗风

2503_91057718的博客 2450

【MySQL索引】4索引优化

COUNT(*):最常用且效率最高的方法,大多数现代数据库系统对此做了专门的优化。COUNT(1):在性能上与 COUNT(*) 基本相同,大多数数据库系统会将它们处理得一样快。COUNT(具体字段):可能会更慢,特别是在字段上没有索引时。它只计算非 NULL 的字段值,因此可能需要扫描整个表来完成计数。

ChanceZhou的博客 1895

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

MYSQL 索引详解及索引优化、分析

索引在MySQL中是比较常见的,索引就相当于我们看书的目录,它是帮助MySQL高效获取数据的一种数据结构,主要用来提高数据的检索效率,减少IO成本,同时通过索引对数据进行排序,降低排序成本。2.索引的作用加快查询速度:通过索引快速定位数据。保证数据唯一性:如主键和唯一索引。优化排序和分组:索引可以加速ORDER BY和GROUP BY操作。用二级索引查数据时,会先检二级索引中的 B+Tree 的索引值(商品编码,product_no),找到对应的叶子节点,然后获取主键值,然后再通过主键索引。

2201_75656709的博客 1861

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MySql的索引优化

select查询的序列号,表示查询中执行select子句或操作表的顺序。id相同时,执行顺序由上至下。id不同,如果是子查询,id的序号会递增,id值越大优先级越高,则先被执行。id相同和不同都存在时,id相同的可以理解为一组,从上往下顺序执行,所有组中,id值越大,优先级越高越先执行。代码:#id相同时,执行顺序是从上往下#id不相同时,执行顺序是从下往上。

迷之自信的代码搬运工 1412

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Mysql索引优化

如果一个索引包含了查询所需的所有字段(覆盖索引),会优先选择,因为可以避免回表。在 MySQL(尤其是 InnoDB)里,索引并不是建了就一定能用。对联合索引(多列索引),只有按照索引定义的最左字段开始查询时才能用到索引。来选择是否走索引、以及用哪一个索引。小表(几十或几百行),优化器可能认为全表扫描比走索引更快。索引扫描时,先过滤区分度高的字段,能显著减少扫描范围。,如果 a 和 b 分别有索引,通常不会用。(a 有索引,b 无索引)→ 可能全表扫描。, 索引优化器认为过滤性差,往往不用索引。

不积跬步无以至千里 1266

MYSQL索引优化

通过合理使用索引、EXPLAIN分析查询执行计划、优化查询语句,可以显著提升MySQL查询的性能。注意,在创建索引时要权衡读取性能与写入性能的平衡,避免过多创建索引,同时选择合适的索引类型和组合索引。

wolf23151269的博客 1527

mysql索引优化

本文介绍了MySQL索引相关命令、索引下推(ICP)优化功能、常见SQL优化技巧、索引设计原则以及分页查询和关联查询的优化方法。通过FORCE INDEX、USE INDEX和IGNORE INDEX命令可以强制或建议MySQL使用特定索引。索引下推(ICP)在MySQL 5.6+中引入,通过在索引层进行部分WHERE条件过滤,减少回表次数,提升查询效率。文章还详细探讨了Order by与Group by的优化、filesort文件排序的原理、索引设计的原则以及分页查询和关联查询的优化策略,如使用覆盖索引、

weixin_58611042的博客 1087

MySQL 索引及SQL优化

MySQL 索引设计及失效情况,SQL优化

青竹暖回阳的博客 2318

了解Mysql优化吗?如何优化索引?

也就是10条数据,放到server层的结果集中,返回给客户端。可以看出,当offset非0时,server层会从引擎层获取到。

dsgdauigfs的博客 1504

mysql索引优化有几种_mysql索引优化

索引类型从物理存储角度上,索引可以分为聚集索引和非聚集索引。1.聚集索引(Clustered Index)聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引。2.非聚集索引(Non-clustered Index)非聚集索引并不决定数据在磁盘上的物理排序,索引上只包含被建立索引的数据,以及一个行定位符 row-locator,这个行定位符,可以理解为一个聚集索引物理排序的指针,通过这个指...

weixin_29000119的博客 2098
上一篇: Mysql 语句优化
下一篇: Mysql服务器设置及技巧
Hey_Linux
博客等级 码龄12年 0粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值