mysql 建索引_mysql数据库正确建立索引及使用
普通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数据库正确建立索引及使用相关推荐
- mysql 数据索引使用_mysql数据库正确建立索引及使用
普通mysql运行,数据量和访问量不大的话,是足够快的,但是当数据量和访问量剧增的时候,那么就会明显发现MySQL很慢,甚至down掉,那么就要考虑优化我们的mysql了.其中优化mysql的一个重要 ...
- 数据库正确建立索引以及最左前缀原则
数据库正确建立索引以及最左前缀原则 转自:https://blog.csdn.net/zhanglu0223/article/details/8713149 1. 索引建立的原则 用于索引的最好的备选 ...
- mysql原生建立索引_MySQL学习笔记之索引
索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...
- 数据库性能优化1——正确建立索引以及最左前缀原则
1. 索引建立的原则 用于索引的最好的备选数据列是那些出现在WHERE子句.join子句.ORDER BY或GROUP BY子句中的列. 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是 ...
- B+树:MySQL数据库中建立索引的数据结构
在MySQL数据库中是通过B+树的数据结构建立索引的. 相比二叉树,B树是一种多叉树,总层数更少,磁盘io次数也会相应减少.而与B树不同的是,B+树把索引和数据分开存储,数据以链表的形式存放在B+树的 ...
- mysql的数据库的索引_MySQL 数据库索引原理与分类
前言 数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度. 目录 1.索引的本质与原理? 2.索引的分类? 1.索引的本质与原理 我们先看一个问题: 假设现在有1000 ...
- mysql添加字段uniquekey索引_MySQL数据库之mysql为字段添加和删除唯一性索引(unique) 的方法...
本文主要向大家介绍了MySQL数据库之mysql为字段添加和删除唯一性索引(unique) 的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.添加PRIMARY KEY ...
- mysql索引 聚集索引_MySql数据库索引-聚集索引和辅助索引
InnoDB存储引擎索引: B+树索引:不能找到一个给定键值的具体行,能找到的只是被查找数据行所在的页.然后把页加载到内存,在查询所要的数据. 全文索引: 哈希索引:InnoDB会根据表的使用情况自动 ...
- mysql数据库视图索引_MySQL数据库的视图、索引
视图:根据某个实表查询出来的结果,而生成的一个虚表. 注意: 1.视图既然作为一张虚表存在,那么对实表的增删改查操作,视图同样成立. 2.视图既然根据实表得到,那对视图的增删改查操作,也会影响实表. ...
最新文章
- linux服务器的搭建配置与应用,linux服务器的搭建与配置
- 统计模型参数量与FLOPs
- 单例模式在多线程中的安全性研究
- IP地址不是唯一的吗?为什么路由器的IP地址都是这样的呢?
- Java SecurityManager checkAwtEventQueueAccess()方法与示例
- TinkPHP内核仿每推推51领啦试客系统源码
- 机器学习中的度量——字符串距离
- utility_VS2015基本操作
- 黄冈a货翡翠,开封a货翡翠
- match VS match_phrase
- 特洛伊木马与计算机病毒有什么区别,特洛伊木马Vs病毒Vs蠕虫, 有什么区别?...
- 程序员常去的14个顶级开发社区
- html5音乐加大音量,怎么调大音乐声音 mp3音量增大器介绍【图解】
- 数字化图书馆软硬件环境要求-转自《博奥智源》
- 步进电机加速的c语言编程,步进电机加速-匀速-减速运行程序(C - 电子制作 - 电子发烧友网...
- CPU的内部架构和工作原理(转)
- 注册表中shell文件不见了_win10系统注册表中的shell文件不小心被删除的恢复教程...
- 屏蔽非微信客户端和支付宝登陆登录操作
- 汽车车牌自动识别技术
- PADS如何导出BOM清单