关于建立索引的几个准则:
1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。
2、索引越多,更新数据的速度越慢。
3、尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB。但MyISAM不支持Transcation。
4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。
5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。
一个很容易犯的错误:
不要在选择的栏位上放置索引,这是无意义的。应该在条件选择的语句上合理的放置索引,比如where,order by。
例子:
SELECT id,title,content,cat_id FROM article WHERE cat_id = 1;
上面这个语句,你在id/title/content上放置索引是毫无意义的,对这个语句没有任何优化作用。但是如果你在外键cat_id上放置一个索引,那作用就相当大了。
几个常用ORDER BY语句的MySQL优化:
1、ORDER BY + LIMIT组合的索引优化。如果一个SQL语句形如:
SELECT [column1],[column2],.... FROM ORDER BY [sort] LIMIT [offset],[LIMIT];
这个SQL语句优化比较简单,在[sort]这个栏位上建立索引即可。
2、WHERE + ORDER BY + LIMIT组合的索引优化,形如:
SELECT [column1],[column2],.... FROM WHERE [columnX] = [value] ORDER BY [sort] LIMIT[offset],[LIMIT];
这个语句,如果你仍然采用第一个例子中建立索引的方法,虽然可以用到索引,但是效率不高。更高效的方法是建立一个联合索引(columnX,sort)
3、WHERE + IN + ORDER BY + LIMIT组合的索引优化,形如:
SELECT [column1],[column2],.... FROM WHERE [columnX] IN ([value1],[value2],...) ORDER BY[sort] LIMIT [offset],[LIMIT];
这个语句如果你采用第二个例子中建立索引的方法,会得不到预期的效果(仅在[sort]上是using index,WHERE那里是using where;using filesort),理由是这里对应columnX的值对应多个。
这个语句怎么优化呢?我暂时没有想到什么好的办法,看到网上有便宜提供的办法,那就是将这个语句用UNION分拆,然后建立第二个例子中的索引:
SELECT [column1],[column2],.... FROM WHERE [columnX]=[value1] ORDER BY [sort] LIMIT[offset],[LIMIT]
UNION
SELECT [column1],[column2],.... FROM WHERE [columnX]=[value2] ORDER BY [sort] LIMIT[offset],[LIMIT]
UNION
……
但经验证,这个方法根本行不通,效率反而更低,测试时对于大部分应用强制指定使用排序索引效果更好点
4、不要再WHERE和ORDER BY的栏位上应用表达式(函数),比如:
SELECT * FROM ORDER BY YEAR(date) LIMIT 0,30;
5、WHERE+ORDER BY多个栏位+LIMIT,比如
SELECT * FROM WHERE uid=1 ORDER x,y LIMIT 0,10;
对于这个语句,大家可能是加一个这样的索引(x,y,uid)。但实际上更好的效果是(uid,x,y)。这是由MySQL处理排序的机制造成的。
以上例子你在实际项目中应用的时候,不要忘记在添加索引后,用EXPLAIN看看效果。
另外注意:
索引的字段类型要一致
分享到:
相关推荐
MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,其性能很大程度上取决于存储引擎和索引的选取与使用。本文将深入探讨 MySQL 中的存储引擎和索引技术,帮助优化数据库性能。 首先,MySQL 提供了多种存储...
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到...
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) 搜索二叉树是一种特殊的二叉树,每个节点至多有两个子...
MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的高效运行。在 MySQL 中,索引可以分为单列索引和组合索引两种。 1. 普通索引 普通索引是最基本的索引...
MySQL数据库索引建立详解 MySQL数据库索引是关系数据库管理系统中的一种机制,旨在提高查询效率和性能。索引是数据库中的一种数据结构,它可以帮助数据库快速定位和检索数据。正确地建立索引可以大大提高数据库的...
### MySQL数据库及索引详解 #### 一、MySQL简介与数据库发展 MySQL是一款非常流行的开源关系型数据库管理...通过理解MySQL及其索引的基本概念,开发者可以更好地管理和优化数据库性能,确保高效地完成数据检索任务。
多列索引则是在两个或更多列上建立的索引,它适用于多个查询条件的情况。然而,多列索引的使用有其特定规则,被称为“最左前缀原则”。这意味着查询条件必须从索引的第一列开始,并按照索引列的顺序匹配,直到遇到...
MySQL教程02主要涵盖了一系列关于MySQL数据库管理系统的深入学习内容,包括但不限于数据库的基本概念、安装与配置、数据类型、表的创建与管理、查询语句的使用、索引的建立与优化、事务处理以及备份与恢复等核心知识...
这样,MySQL可以在两个字段同时匹配时更有效地执行查询。 要验证数据库是否确实使用了创建的索引,可以使用`EXPLAIN`命令。例如,`EXPLAIN SELECT * FROM mytable WHERE category_id=1 AND user_id=2;`会显示出查询...
16.MySQL高级_索引分类和建索引命令语句.avi 15.MySQL高级_索引优势劣势.avi 14.MySQL高级_索引是什么.avi 13.MySQL高级_七种JOIN的SQL编写.avi 12.MySQL高级_七种JOIN理论.avi 11.MySQL高级_SQL执行加载...
- **索引的组成**:对于每个索引项,MySQL都会保存一个指向实际数据文件中记录位置的“指针”。这意味着当查询条件匹配时,MySQL可以直接通过索引找到对应记录的具体位置,进而快速返回结果。 #### 四、索引类型...
MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...
标题:“MySQL 索引最佳实践” 描述:“提高mysql数据库性能必备。详细讲解mysql优化过程。” 在MySQL数据库中,索引扮演着至关重要的角色,它不仅能够显著提升数据查询的速度,还能帮助执行某些约束(如唯一性和...
在MySQL数据库管理中,索引是提升查询性能的关键要素。索引可以被看作是数据库中的目录,使得数据检索更为迅速。本主题将深入探讨如何导出和删除MySQL中的索引,以及相关的脚本操作。 首先,让我们了解什么是MySQL...
MySQL 高级 - 索引 - 索引分类.avi │ │ 10. MySQL 高级 - 索引 - 索引语法.avi │ │ 11. MySQL 高级 - 索引 - 索引设计原则.avi │ │ 12. MySQL 高级 - 视图 - 概述.avi │ │ 13. MySQL 高级 - 视图 - 创建及...
在"尚硅谷mysql高级:索引、优化"这个主题中,我们主要关注两个关键概念:索引和优化,这对于提升数据库性能至关重要。 一、MySQL索引 1. 索引类型:MySQL支持多种索引类型,包括B-Tree(默认索引类型)、Hash、...