哪些情况需要创建索引?
1.主键自动建立唯一索引;
2.频繁作为查询条件的字段;
3.查询中与其他表关联的字段,外键关系建索引;
4.排序的字段(非主键);
5.查询中统计或分组字段。

tips:
单键索引与组合索引如何选择?
在高并发下应倾向创建组合索引。

哪些情况不适合创建索引?
1.表记录太少;
2.经常增删改的表;
3.重复且平均分布的表字段。
4.频繁更新字段不适合;
5.where条件里用不到的字段;

如何尽量避免索引失效?
1.全值匹配
2.最佳左前缀法则
3.不要在索引列上做任何操作(计算、函数、类型转换等)
eg: select * from tbl where id-1=2; ×
select * from test where id=3; √
4.存储引擎不能使用索引中范围条件右边的列(范围后全失效)
eg: create idx_name_age_positon on employees (name,age,positon);
EXPLAIN SELECT name,age,position from employees where name=‘AMY’ and age>23 and position=‘manager’;
索引只查找name,对age只排序,name后索引失效;
5.尽量使用覆盖索引,减少select*
6.mysql在使用不等于(!= / <>)时无法使用索引导致全表扫描
7.is null, is not null不能使用索引
8.like(range)以通配符开头(’%abc%’),mysql索引失效,变全局扫描
9.字符串不加单引号,索引失效!
10.少用or,避免索引失效!

tips:

  1. like查询用’abc%’,
    若必须要用like查询’%abc%’,用覆盖索引解决。
  2. 字符串不加单引号,mysql会自动做类型转换,会导致索引失效甚至数据错误;
    select * from tbl where id=0; 错误
    select * from tbl where id=‘0’ 正确

什么情况创建索引?什么情况不创建索引?MySQL如何避免索引失效?相关推荐

  1. mysql 聚集索引 存什么_什么是mysql的聚集索引?

    什么是MySQL的聚集索引?在本文将给大家讲解mysql的聚集索引,包括聚集索引与普通的索引的区别. 在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别?在MySQL中,InnoDB引擎表 ...

  2. 索引利弊,如何创建索引,单键索引还是组合索引

    ** 索引的利弊与如何判定,是否需要索引** 相信读者都知道索引能够极大地提高数据检索的效率,让Query 执行得更快,但是可能并不是每一位朋友都清楚索引在极大提高检索效率的同时,也给数据库带来了一些 ...

  3. mysql的覆盖索引原理_「Mysql索引原理(七)」覆盖索引

    通常大家都会根据查询的WHERE条件来创建合适的索引,不过这只是索引优化的一个方面.设计优秀的索引应该考虑到整个查询,而不单单是WHERE条件部分.索引确实是一种查找数据的高效方式,但是MySQL也可 ...

  4. 论MySQL何时使用索引,何时不使用索引

    索引: 使用索引可快速访问数据库表中的特定信息.索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列.如果要按姓查找特定职员,与必须搜索表中的所有行相比,索 ...

  5. MySQL高级 —— 高性能索引

    引言 最近一直在抱着<高性能MySQL(第三版)>研究MySQL相关热点问题,诸如索引.查询优化等,这阶段的学习是前一段时间MySQL基础与官方的"阅读理解"的进一步延 ...

  6. mysql gis index 索引原理_从原理到优化,深入浅出数据库索引

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 数据库查询是数据库的最主要功能之一,我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的 ...

  7. mysql5.0中索引的设计和使用_MySQL 5.0中索引的正确设计和使用

    此文章主要向大家描述的是MySQL 5.0中索引的正确设计与具体使用方案的描述, 在一般在数据中,很多朋友对数据库进行优化一般用的是索引.我们通过索引一般可以解决大多数的SQL性能问题. MySQL ...

  8. MySQL事务与索引

    MySQL事务与索引 一.事务 1.事务简介 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行, ...

  9. mysql5.6 函数索引_聊聊MySQL中的索引

    关于MySQL中的索引使用 索引是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的SQL性能问题. 索引的存储分类: 1.B-Tree索引:最常见的索引类型,大部分引擎都支 ...

  10. mysql之联合索引

    mysql之联合索引测试: 前期准备: 建立联合索引? CREATE TABLE `test` (`id` bigint(16) NOT NULL AUTO_INCREMENT,`aaa` varch ...

最新文章

  1. Struts 学习笔记1 -Struts Framework 概览
  2. mac上安装dart环境
  3. Mac和 iOS 下的对称和非对称加密算法的使用
  4. Ubuntu下 MySQL安装
  5. IOS横竖屏控制与事件处理
  6. Qt修炼手册4_信号与槽
  7. 《SolidWorks 2013中文版机械设计从入门到精通》一1.4 操作环境设置
  8. python数据库去重复_python string 去重复数据库
  9. 编程高手必学的内存知识02:深入理解栈
  10. Android BaseAdapter应用基础
  11. IS-IS详解(十三)——IS-IS 路由开销类型
  12. 一分钟了解微服务的好处和陷阱
  13. php mysql手册下载chm_PHP7教程|PHP7中文手册下载chm版 - 欧普软件下载
  14. 网络工程师面试真题——ACL与IP Prefix的区别
  15. 使用Poedit汉化wordpress主题
  16. roundcube db.inc.php,Roundcube Webmail 安装配置篇
  17. DeepSpeech语音转文本合成技术
  18. 薛非的个人资料编程c语言,上海启航考研英语薛非老师
  19. 秋在季节轮回里,你在思念绽放中
  20. 中国式审美真的太可怕了

热门文章

  1. Linux下x86_64进程地址空间布局
  2. python 中del 的用法
  3. dbgview OutputDebugString输出函数
  4. dpkg status database is locked by another process
  5. Python黑客编程3网络数据监听和过滤
  6. 【洛谷1341】无序字母对(欧拉回路)
  7. Vue+Mock.js模拟登录和表格的增删改查
  8. 集群IPtables转发与防火墙
  9. nginx https ssl 配置
  10. Linux kill 杀死指定进程