普通mysql运行,数据量和访问量不大的话,是足够快的,但是当数据量和访问量剧增的时候,那么就会明显发现MySQL很慢,甚至down掉,那么就要考虑优化我们的mysql了。其中优化mysql的一个重要环节就是为数据库建立正确合理的索引。如果没有索引,执行查询时mysql必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,mysql无需扫描任何记录即可迅速得到目标记录所在的位置。也就是说索引可以大大减少数据库管理系统查找数据的时间。索引有哪些优点?1、  通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2、  可以大大加快数据的检索速度,这也是创建索引的最主要原因。3、  可以加速表和表之间的连接,这在实现数据的参考完整性方面特别有意义。4、  在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。索引有哪些缺点?1、  创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。2、  除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。3、  当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。建立和使用索引有哪些注意事项:1、索引要建立在经常进行select操作的字段上。这是因为,如果这些列很少用到,那么有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。2、 索引要建立在值比较唯一的字段上。这样做才是发挥索引的最大效果。,比如主键的id字段,唯一的名字name字段等等。如果索引建立在唯一值比较少的字段,比如性别gender字段,寥寥无几的类别字段等,刚索引几乎没有任何意义。3、 对于那些定义为text、p_w_picpath和bit数据类型的列不应该增加索引。因为这些列的数据量要么相当大,要么取值很少。4、 当修改性能远远大于检索性能时,不应该创建索引。修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。5、 在WHERE和JOIN中出现的列需要建立索引。6、 在以通配符%和_开头作查询时,mysql索引是无效的。但是这样索引是有效的:select * from tbl1 where name like 'xxx%',所以mysql正确建立索引是很重要的。

假如你有一个表,

SQL> CREATE TABLE test_tab (

2 id INT,

3 name VARCHAR(10),

4 age INT,

5 val VARCHAR(10)

6 );

你的业务,有一个查询,是

SELECT * FROM test_tab WHERE name = 一个外部输入的数据

刚开始,数据不多的时候,执行效果还不错。

随着数据量的增加,这个查询,执行起来,越来越慢了。

然后在 name 上面 建立了索引

CREATE INDEX idx_test4_name ON test_tab (name );

这样, 可以加快前面那个查询的速度。

但是,某天,你执行了下面这个SQL, 发现速度又慢了

SELECT * FROM test_tab WHERE age = 25

为啥呢? 因为 age 字段上面,没有索引

索引只在 name 上面有

换句话说, 也就是 WHERE 里面的条件, 会自动判断,有没有 可用的索引,如果有, 该不该用。

多列索引,就是一个索引,包含了2个字段。

例如:

CREATE INDEX idx_test_name_age ON test_tab (name, age);

那么

SELECT * FROM test_tab

WHERE

name LIKE '张%'

AND age = 25

这样的查询,将能够使用上面的索引。

多列索引,还有一个可用的情况就是, 某些情况下,可能查询,只访问索引就足够了, 不需要再访问表了。例如:

SELECT

AVG( avg ) AS 平均年龄

FROM

test_tab

WHERE

name LIKE '张%'

这个时候, name 与 age 都包含在索引里面。 查询不需要去检索表中的数据。

mysql 建索引_mysql数据库正确建立索引及使用相关推荐

  1. mysql 数据索引使用_mysql数据库正确建立索引及使用

    普通mysql运行,数据量和访问量不大的话,是足够快的,但是当数据量和访问量剧增的时候,那么就会明显发现MySQL很慢,甚至down掉,那么就要考虑优化我们的mysql了.其中优化mysql的一个重要 ...

  2. 数据库正确建立索引以及最左前缀原则

    数据库正确建立索引以及最左前缀原则 转自:https://blog.csdn.net/zhanglu0223/article/details/8713149 1. 索引建立的原则 用于索引的最好的备选 ...

  3. mysql原生建立索引_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  4. 数据库性能优化1——正确建立索引以及最左前缀原则

    1. 索引建立的原则 用于索引的最好的备选数据列是那些出现在WHERE子句.join子句.ORDER BY或GROUP BY子句中的列. 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是 ...

  5. B+树:MySQL数据库中建立索引的数据结构

    在MySQL数据库中是通过B+树的数据结构建立索引的. 相比二叉树,B树是一种多叉树,总层数更少,磁盘io次数也会相应减少.而与B树不同的是,B+树把索引和数据分开存储,数据以链表的形式存放在B+树的 ...

  6. mysql的数据库的索引_MySQL 数据库索引原理与分类

    前言 数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度. 目录 1.索引的本质与原理? 2.索引的分类? 1.索引的本质与原理 我们先看一个问题: 假设现在有1000 ...

  7. mysql添加字段uniquekey索引_MySQL数据库之mysql为字段添加和删除唯一性索引(unique) 的方法...

    本文主要向大家介绍了MySQL数据库之mysql为字段添加和删除唯一性索引(unique) 的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.添加PRIMARY KEY ...

  8. mysql索引 聚集索引_MySql数据库索引-聚集索引和辅助索引

    InnoDB存储引擎索引: B+树索引:不能找到一个给定键值的具体行,能找到的只是被查找数据行所在的页.然后把页加载到内存,在查询所要的数据. 全文索引: 哈希索引:InnoDB会根据表的使用情况自动 ...

  9. mysql数据库视图索引_MySQL数据库的视图、索引

    视图:根据某个实表查询出来的结果,而生成的一个虚表. 注意: 1.视图既然作为一张虚表存在,那么对实表的增删改查操作,视图同样成立. 2.视图既然根据实表得到,那对视图的增删改查操作,也会影响实表. ...

最新文章

  1. linux服务器的搭建配置与应用,linux服务器的搭建与配置
  2. 统计模型参数量与FLOPs
  3. 单例模式在多线程中的安全性研究
  4. IP地址不是唯一的吗?为什么路由器的IP地址都是这样的呢?
  5. Java SecurityManager checkAwtEventQueueAccess()方法与示例
  6. TinkPHP内核仿每推推51领啦试客系统源码
  7. 机器学习中的度量——字符串距离
  8. utility_VS2015基本操作
  9. 黄冈a货翡翠,开封a货翡翠
  10. match VS match_phrase
  11. 特洛伊木马与计算机病毒有什么区别,特洛伊木马Vs病毒Vs蠕虫, 有什么区别?...
  12. 程序员常去的14个顶级开发社区
  13. html5音乐加大音量,怎么调大音乐声音 mp3音量增大器介绍【图解】
  14. 数字化图书馆软硬件环境要求-转自《博奥智源》
  15. 步进电机加速的c语言编程,步进电机加速-匀速-减速运行程序(C - 电子制作 - 电子发烧友网...
  16. CPU的内部架构和工作原理(转)
  17. 注册表中shell文件不见了_win10系统注册表中的shell文件不小心被删除的恢复教程...
  18. 屏蔽非微信客户端和支付宝登陆登录操作
  19. 汽车车牌自动识别技术
  20. PADS如何导出BOM清单

热门文章

  1. 用SSD训练自己的数据集
  2. 错误fatal error: zlib.h: 没有那个文件或目录的解决办法
  3. OpenCV学习之Scalar数据类型
  4. 如何将视频下载并且转码拼接
  5. python list操作复杂度
  6. 《深入理解Android:Telephony原理剖析与最佳实践》一1.1 智能手机的系统结构
  7. WLAN产品形态之分层架构
  8. 因新漏洞问题 Firefox 49发布时间将延期一周
  9. Linq使用Group By
  10. Java中的List