首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql索引优化实例1

目录 目录 前言 当前情况介绍 分析及优化 结果 前言 PS:本文只讲解了一个实例,中间用到了两个mysql索引相关概念,覆盖索引和最左前缀索引,需要读者自行学习一下....所以最后决定是,不使用缓存或者lucene等花里胡哨东西,就使用mysql,优化一下索引,争取到做单个查询300ms内,这样加上一些带代码层面的优化,接口能接近1s左右....分析及优化 使用explain命令分析执行计划,第一个sql索引使用已经OK,where语句全部命中了索引,且查询字段是完全覆盖了索引....分析第二个语句,使用索引,但是仅使用了联合索引第一个,因为不半部分是个表达式,无法使用索引. 第三个语句,虽然存在两个对应字段独立索引,但是根据执行计划显示,mysql没有使用第二个索引....联系邮箱:huyanshi2580@gmail.com 更多学习笔记见个人博客——>呼延十 var gitment = new Gitment({ id: 'Mysql索引优化实例1', // 可选

56140

正确使用索引和Explain工具,MySQL性能提升实例

table: row行引用表。. type: 这个字段是MySQL连接使用方式。这可能是explain输出中最重要字段。它可以指示缺失索引,还可以显示应该如何重写查询。...eq_ref:该索引所有部分都被连接使用索引是PRIMARY_KEY或UNIQUE NOT NULL。 ref:索引所有匹配行都为来自前一个表每个行组合读取。...possible_keys:显示MySQL可以使用键,以便从表中查找行。这些键可以在实践中使用,也可以不使用。 key:指示MySQL使用实际索引MySQL总是寻找可以用于查询最优密钥。...通常,如果ORDER BY是从表中按字段进行,而不是联接顺序中第一个,则不能使用索引。 不要通过表达式。表达式和函数不允许使用索引。 注意一个大极限值( LIMIT value)。...我们应用程序拥有它所需要所有索引,而且速度非常快,但是我们现在知道,每当我们需要检查性能提升时,我们总是可以使用解释和索引

1.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql前缀索引使用,Mysql:前缀索引索引

    大家好,又见面了,我是你们朋友全栈君。 可以像普通索引一样使用mysql前缀索引吗?...解决方法: 如果你想一下,MySQL仍会给你正确答案,即使没有索引…它只是不会那么快……所以,是的,你仍然会得到一个正确答案前缀索引....需要注意事实是,优化器不会对某些操作(如排序或分组)使用前缀索引,因为它没有为此目的覆盖足够列数据....前缀索引排序不超出前缀长度.如果您查询使用完整索引来查找行,您通常会发现返回行是按索引顺序隐式排序.如果您应用程序需要这种行为,那么它当然会期待它不应该期望东西,因为除非您显式ORDER...并且,前缀索引不能用作覆盖索引.覆盖索引是指SELECT中所有列恰好包含在一个索引情况(加上可选主键,因为它也总是存在).优化器将直接从索引读取数据,而不是使用索引来标识要在主表数据中查找行.

    5.3K20

    mysql如何使用前缀索引_MySQL前缀索引你是如何使用

    大家好,又见面了,我是你们朋友全栈君。 灵魂3连问: 什么是前缀索引? 前缀索引也叫局部索引,比如给身份证前 10 位添加索引,类似这种给某列部分信息添加索引方式叫做前缀索引。...为什么要用前缀索引? 前缀索引能有效减小索引文件大小,让每个索引页可以保存更多索引值,从而提高了索引查询速度。...但前缀索引也有它缺点,不能在 order by 或者 group by 中触发前缀索引,也不能把它们用于覆盖索引。 什么情况下适合使用前缀索引?...当字符串本身可能比较长,而且前几个字符就开始不相同,适合使用前缀索引;相反情况下不适合使用前缀索引,比如,整个字段长度为 20,索引选择性为 0.9,而我们对前 10 个字符建立前缀索引其选择性也只有...= ‘1892008.205824857823401.800099203178258.8904820949682635656.62526521254’; 查询时间:3.291s 当使用第一位字符创建前缀索引

    2.5K20

    Mysql索引-不会使用索引场景

    可以看到extra值是Using index,说明使用了覆盖索引。虽然使用索引,但是也是全索引扫描。...此时我们可以使用下面语句,实现我们需要结果,下面语句也用上了索引快速定位能力,但是比较繁琐 mysql> select count(*) from tradelog where -> (t_modified...,会破坏索引有序性,是无法使用索引快速定位功能,而只能全索引扫描,需要注意是,函数没有破坏索引有序性,优化器也不会考虑使用索引快速定位能力, 案例二:隐式类型转换 我们先看看下面语句...我们发现第一行使用索引,这个索引是建立在主键索引,并且扫描了一行,但是第二行,我们发现没有使用索引,进行了全表扫描。...,一个个判断tradeid值是否符合 正常按照我们理解,第二行tradeid它也是有索引,应该也是使用索引才对,为什么没有使用索引 其实第三步,相当是下面语句 mysql> select

    1.2K20

    正确使用MySQL索引

    MySQL之所以能够高效检索数据,可以说全赖索引之功。在索引使用过程中,要注意一下几点。 1、MySQL使用索引时候,采用是最左匹配原则。...例如,where条件里面有、not in、not exists时候,即便是这些判断字段上加上索引,也不会起作用。 4、MySQL在join中连接字段类型如果不一致,则不能使用索引。...MySQL利用B+数索引检索数据时候,如果不是基于聚簇索引,或者说如果不是基于主键检索,那么即便是SQL语句能够利用索引,但索引返回信息也只是所需结果行主键值,要渠道全部数据,还需要通过这些主键值重新导数据文件里再做一次检索操作...如果想利用覆盖索引的话,可以添加索引(update_date,namespace)。 6、其他一些需要注意地方。 索引分辨度不高,即便使用索引,扫描全表内容也经常超过20%,这就要谨慎添加索引。...另外尽快避免使用like查询,特别是like '%name',这种左边模糊匹配情况,使用MySQL无法使用索引。如果出现隐式字符类型转换,MySQL也不能使用索引,相当于在判断列上加了函数一样。

    1K10

    MySQL索引失效及使用索引优缺点

    联合索引使用时遵循最左匹配原则,如果不是从最左列开始时,整个索引失效,如果最左匹配则依次往右使用索引,直到碰到不匹配地方之后生效之前匹配到索引 ? ?...like查询失效 使用模糊查询时,%只有在最右方时候才能生效 为title设置一个单独索引 ? ? ? 查询中含有不等于或者or则索引不生效 ? ? ?...注意事项 在进行索引使用测试时,可能会因为测试数据太少从而MySQL会认为查询语句走全表扫描比走索引更有效,所以会自动去除索引,为避免测试结果误导可使用如下方式强制MySQL使用索引 explain...select * from book FORCE index(索引名称) where price=1+1; 使用索引优点 唯一索引或主键索引可以保证数据库表唯一性 可以提高查询效率和性能 加速表连接速度...加快排序效率 使用索引缺点 每次更新修改删除都需要维护索引、从而消耗性能 索引文件会占用物理空间

    3.3K60

    MySQL优化以及索引使用

    MySQL优化 选取最适用字段长度 MySQL可以很好支持大数据量存取,但是一般说来,数据库中表越小,在它上面执行查询也就会越快。...确保order by / group by 只根据一个表上字段进行,这样才有使用索引进行排序分组可能性. 使用外键 锁定表方法可以维护数据完整性,但是它却不能保证数据关联性。...如果要在MySQL使用外键,一定要记住在创建表时候将表类型定义为事务安全表InnoDB类型。该类型不是MySQL默认类型。...该索引要求主键中每个值都唯一。当在查询中使用主键索引时, 它允许对数据快速访问 从物理存储角度,索引分为聚集索引和非聚集索引 聚集索引:表中行物理顺序与键值逻辑(索引)顺序相同。...删除不再使用或者很少使用索引 MySQL索引最多包含16个索引列 条件带like 注意事项 like 模糊查询中,右模糊查询(abc%)会使用索引,而(%abc)和(%abc%)会放弃索引使用全表扫描

    85642

    mysql联合索引使用规则

    1’),(‘2′,’2′,’2′,’2′,’2’) 使用MySql Explain开始分析题目结果: A选项: 结果可以看出,c1,c2,c3,c4均使用到了该索引,而我们对A结果稍作更改: 将c2...条件去掉后: 根据索引最左原则,c2字段没有使用索引,c2之后字段都不能使用索引。...下面2图我们对比下索引最左原则: 上图结果显示直接使用c3是全表查询,无法使用索引,所以c3字段使用索引前提是c1,c2两字段均使用索引。 即是索引最左原则(左前缀原则)。...排序其实是利用联合索引直接完成了,即:使用了c1234联合索引,就已经使得c1下c2,c2下c3,c3下c4是有序了,所以实际是排序利用了索引,c3字段并没有使用索引。...c1,c2,c3,c4….cN)联合索引,where 条件按照索引建立字段顺序来使用(不代表and条件必须按照顺序来写),如果中间某列没有条件,或使用like会导致后面的列不能使用索引

    1.4K20

    Mysql全文索引使用

    目录 目录 前言 什么是全文索引? 如何创建全文索引? 如何使用全文索引进行搜索?...总结 参考文章 前言 在MySQL 5.6版本以前,只有MyISAM存储引擎支持全文引擎.在5.6版本中,InnoDB加入了对全文索引支持,但是不支持中文全文索引.在5.7.6版本,MySQL内置了ngram...MySQL全文索引查询有多种模式,我们一般经常使用两种. 1. 自然语言搜索 就是普通包含关键词搜索. 2....总结 InnoDB支持全文索引,当然是个好消息,在一些小全文搜索场景下,可以只使用关系型数据库就搞定了....对于全文索引需求,如果只是很小数据量,且对搜索结果精确度和可定制化程度要求不高的话,可以使用MySQL全文索引,如果是专门做搜索,对搜索中分词以及结果都有较高要求,建议还是使用lucene

    1.1K20

    MySQL索引设计和使用

    一.概述   所有MySQL 列类型都可以被索引,是提高select查询性能最佳方法。...删除索引 DROP INDEX  ixcityname ON  city; 二 .设计索引原则: 1. 索引使用在where后列,而不是select 选择列。 2....4.不过度使用索引。因为占用磁盘空间,降低写操作性能。 5. innodb表普通索引都会保存主键键值,所以主键键值尽可能选择较短类型。 6....利用最左前缀,在创建一个n列索引时,实际是创建了mysql 可利用n个索引,多列索引可起几个索引作用,因为可利用索引中最左边列集来匹配行。...只用于使用=或 操作符等式比较。 2. 优化器不能使用hash索引来加速order by 操作。 3. mysql 不能确定在两个值之间大约有多少行。

    58910

    Mysql索引使用正确姿势

    今天给大家简单介绍一下mysql索引用法,像在我们日常业务开发中,最核心其实就是写SQL命令,但是你写SQL真的用到索引了吗?...索引实现原理 mysql数据库索引实现是在存储引擎中完成,今天主要以InnoDB存储引擎为例给大家介绍一下。...如果mysql估计使用全表扫描要比使用索引快,则不使用索引。 在MYSQL使用不等于(,!=)时候无法使用索引,会导致索引失效。...索引优化原则 给需要字段加索引 一般需要加索引都是where中经常使用字段,但是像性别这种属性字段,加索引意义不大,因为性别这类字段选择性太低(基础/总数)。...索引使用情况: 1 SIMPLE userinfo ref name_age name_age 773 const,const 1 100 正确使用联合索引 联合索引一定要注意索引顺序,一般放在前面的都是选择性比较高索引字段

    80210

    一百万数据索引实例測试–mysql

    : 1.where和order by等字段建立索引 2.使用唯一索引:对于last_login,area等字段反复次数比較少,能够使用索引;而sex无非就两个值:性别1。...不值得索引 3.多列索引:不要为每个列单独建立索引。这样并不能将mysql索引效率最大化。使用索引合并策略” 4.选择合理索引列顺序:索引顺序意味着索引首先依照最左列进行排序。...sex这样给反复次数特别多列添加索引如sex这样会减少查询效率,详细原因有待查找 2.给反复次数比較少列添加索引还是可以大幅度提高效率 3.给where和orderby之后字段加入索引才会加快查询效率...4.为每个列单独建立索引,不能将索引效率最大化,应该使用索引合并策略,即依据查询条件。...推荐书籍:高性能mysql(第三版) PDF版本号:http://pan.baidu.com/s/1sjJIyRV 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    93020

    Mysql索引优化初体验(二)-使用索引

    索引前Extra值是Using Where,type值为ALL,加索引后Extra值为空,type值为ref,表示使用引用。 那么为什么索引会提高查询速度呢?...原因是索引会根据索引值进行分类,这样就不用再进行全表扫描了。 ? 示意图 比如上图,action值为2索引值分类存储在了索引空间,可以快速地查询到索引值所对应列。...如何使用 下面介绍一下如何使用SQL创建、查看和删除索引。...创建索引三种方式: 使用CREATE INDEX创建,语法如下: CREATE INDEX indexName ON tableName (columnName(length)); 例如我们对ip_address...这一列创建一个长度为16索引: CREATE INDEX index_ip_addr ON t_user_action_log (ip_address(16)); 使用ALTER语句创建,语法如下:

    69950

    MySQL进阶笔记-4(索引使用)

    MySQL系列文章 MySQL进阶笔记-01 MySQL进阶笔记-2(存储引擎) MySQL进阶笔记-3(MySQL优化) 索引使用索引是数据库优化最常用也是最重要手段之一, 通过索引通常可以帮助用户解决大多数...MySQL性能优化问题。...字符串不加单引号,造成索引失效。 由于,在查询是,没有对字符串加单引号,MySQL查询优化器,会自动进行类型转换,造成索引失效。 6)....如果MySQL评估使用索引比全表更慢,则不使用索引。 10). is NULL , is NOT NULL 有时索引失效。 11). in 走索引, not in 索引失效。 12)....Handler_read_rnd :根据固定位置读一行请求数。如果你正执行大量查询并需要对结果进行排序该值较高。你可能使用了大量需要MySQL扫描整个表查询或你连接没有正确使用键。

    32250
    领券