【mysql】mysql索引及优化学习
一般优化mysql首先看查找的数据有没有用到索引,没有索引就加索引,有索引时候避免索引失效。(如果优化器觉得不需要索引就能返回所需要的数据暂不考虑)
看下面两条语句
MySQL [release_test_oa]> EXPLAIN SELECT * FROM WORKFLOW_LOGS WHERE ID -100 < 300000; +----+-------------+---------------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | WORKFLOW_LOGS | ALL | NULL | NULL | NULL | NULL | 3998 | Using where | +----+-------------+---------------+------+---------------+------+---------+------+------+-------------+
MySQL [release_test_oa]> EXPLAIN SELECT * FROM WORKFLOW_LOGS WHERE ID < 300000-100 ; +----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+ | 1 | SIMPLE | WORKFLOW_LOGS | range | PRIMARY | PRIMARY | 8 | NULL | 1999 | Using where | +----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
上面那句没有使用到ID字段上的索引,而下面使用到了,所以要避免在列上进行表达式计算。
模糊搜索时候前置%不能使用索引
mysql> EXPLAIN SELECT * FROM workflow_order WHERE WF_ID LIKE '%HRCZ%'; +----+-------------+----------------+------------+------+---------------+------+---------+------+-------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------------+------------+------+---------------+------+---------+------+-------+----------+-------------+ | 1 | SIMPLE | workflow_order | NULL | ALL | NULL | NULL | NULL | NULL | 21491 | 11.11 | Using where | +----+-------------+----------------+------------+------+---------------+------+---------+------+-------+----------+-------------+ 1 row in set, 1 warning (0.01 sec) mysql> EXPLAIN SELECT * FROM workflow_order WHERE WF_ID LIKE '%HRCZ'; +----+-------------+----------------+------------+------+---------------+------+---------+------+-------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------------+------------+------+---------------+------+---------+------+-------+----------+-------------+ | 1 | SIMPLE | workflow_order | NULL | ALL | NULL | NULL | NULL | NULL | 21491 | 11.11 | Using where | +----+-------------+----------------+------------+------+---------------+------+---------+------+-------+----------+-------------+ 1 row in set, 1 warning (0.00 sec)
下面可以用到
mysql> EXPLAIN SELECT * FROM workflow_order WHERE WF_ID LIKE 'HRCZ%'; +----+-------------+----------------+------------+-------+-------------------------------+-------------------------------+---------+------+------+----------+-----------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------------+------------+-------+-------------------------------+-------------------------------+---------+------+------+----------+-----------------------+ | 1 | SIMPLE | workflow_order | NULL | range | workflow_process_wf_id_unique | workflow_process_wf_id_unique | 98 | NULL | 425 | 100.00 | Using index condition | +----+-------------+----------------+------------+-------+-------------------------------+-------------------------------+---------+------+------+----------+-----------------------+
数据区分度不大的时候,索引也会失效
比如字段只有两个值,如性别
SELECT * FROM `USERS` WHERE `sex` = 1;
【mysql】mysql索引及优化学习的更多相关文章
- MySQL函数索引及优化
很多开发人员在使用MySQL时经常会在部分列上进行函数计算等,导致无法走索引,在数据量大的时候,查询效率低下.针对此种情况本文从MySQL5.7 及MySQL8.0中分别进行不同方式的优化. 1. M ...
- 理解Mysql的索引与优化
转自:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库 ...
- MySQL的索引与优化
写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...
- MySQL的索引及其优化
前言 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整 ...
- mysql的索引以及优化
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- mysql:联合索引及优化
命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 尽量不要用or,如果可以用union代 ...
- MySQL中索引和优化的用法总结
1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...
- 【mysql】索引的优化
写在前面的话 查询容易,优化不易,且写且珍惜 mysql结构 从MySQL逻辑架构来看,MySQL有三层架构,第一层连接,第二层查询解析.分析.优化.视图.缓存,第三层,存储引擎 MySQL有哪些索引 ...
- Mysql常用索引及优化
索引是帮助我们快速获取数据的数据结构.索引是在存储引擎中实现的,因此不同存储引擎的索引也不同.这里只介绍InnoDB存储索引所支持的BTree索引: 一.索引类型 为了方便举例子,先创建表person ...
随机推荐
- Linux下设置MySql自动启动
https://www.cnblogs.com/sunny3096/p/7954146.html
- C++常用宏
宏是由 #define 定义而来,在预处理阶段进行宏展开,它的格式是: #define N 2 + 2 // 仅仅是字符串替换 #define N (2 + 2) // 也是字符串 ,但是是(2 + ...
- java随笔5 完整路径的应用
不仅类,函数,甚至参数都可以获取完整路径
- 将Vue移动端项目打包成手机app---HBuilder
将移动端页面打包成app 1.使用 HBuilder 直接编译打包 点击左上角 文件>打开目录>选择目录 选择用Webpack打包好的dist文件目录 由于我添加到项目了,所以会显示该项 ...
- flutter屏幕适配
现在的手机品牌和型号越来越多,导致我们平时写布局的时候会在个不同的移动设备上显示的效果不同, 比如我们的设计稿一个View的大小是300px,如果直接写300px,可能在当前设备显示正常,但到了其他设 ...
- AssemblyScript的测试
详细文档介绍 export function f(x: i32): i32 { if (x === 1 || x === 2) { return 1; } return f(x - 1) + f(x ...
- 用python写一个预警机器人(支持微信和钉钉)
背景 线上的系统在运行中,发生故障时怎么及时的通过手机通知到相关人员?当然这是个很简单的需求,现有的方法有很多,例如: 如果我们用的云产品,那么一般都会有配套对应的监控预警功能,根据需要配置一下即可, ...
- Postman & API
Postman & API https://www.getpostman.com/ https://www.getpostman.com/downloads/ Postman Canary h ...
- include与__autoload与命名空间namespace与PSR4详解
1. include, require, include_once, require_once include和require是PHP中引入源文件最基本的用法,其他例如__autoload, name ...
- C-LODOP设置同一页面 手机电脑都打印
C-Lodop有四种角色,1:客户端本地打印方式客户端访问web,调用客户端本地的打印机进行打印,这时候调用的安装在客户端本地的c-lodop服务,实际调用的是http://Localhost:800 ...