`

MySQL教程建立索引的几个准则 怎样建索引更有效!

阅读更多
关于建立索引的几个准则:



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就是一个人力三轮车拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到...

    MySQL索引 聚集索引

    MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。

    MySQL Innodb 索引原理详解

    在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) 搜索二叉树是一种特殊的二叉树,每个节点至多有两个子...

    MySQL索引类型大汇总

    MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的高效运行。在 MySQL 中,索引可以分为单列索引和组合索引两种。 1. 普通索引 普通索引是最基本的索引...

    为mysql数据库建立索引.docx

    MySQL数据库索引建立详解 MySQL数据库索引是关系数据库管理系统中的一种机制,旨在提高查询效率和性能。索引是数据库中的一种数据结构,它可以帮助数据库快速定位和检索数据。正确地建立索引可以大大提高数据库的...

    mysql数据库以及索引详解.pptx

    ### MySQL数据库及索引详解 #### 一、MySQL简介与数据库发展 MySQL是一款非常流行的开源关系型数据库管理...通过理解MySQL及其索引的基本概念,开发者可以更好地管理和优化数据库性能,确保高效地完成数据检索任务。

    mysql多条件索引

    多列索引则是在两个或更多列上建立的索引,它适用于多个查询条件的情况。然而,多列索引的使用有其特定规则,被称为“最左前缀原则”。这意味着查询条件必须从索引的第一列开始,并按照索引列的顺序匹配,直到遇到...

    MYSQL教程02 MYSQL教程02 MYSQL教程02

    MySQL教程02主要涵盖了一系列关于MySQL数据库管理系统的深入学习内容,包括但不限于数据库的基本概念、安装与配置、数据类型、表的创建与管理、查询语句的使用、索引的建立与优化、事务处理以及备份与恢复等核心知识...

    给MySQL建立索引1

    这样,MySQL可以在两个字段同时匹配时更有效地执行查询。 要验证数据库是否确实使用了创建的索引,可以使用`EXPLAIN`命令。例如,`EXPLAIN SELECT * FROM mytable WHERE category_id=1 AND user_id=2;`会显示出查询...

    mysql高级视频教程百度云(2019).txt

    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索引导出删除

    在MySQL数据库管理中,索引是提升查询性能的关键要素。索引可以被看作是数据库中的目录,使得数据检索更为迅速。本主题将深入探讨如何导出和删除MySQL中的索引,以及相关的脚本操作。 首先,让我们了解什么是MySQL...

    MySQL高级教程视频

    MySQL 高级 - 索引 - 索引分类.avi │ │ 10. MySQL 高级 - 索引 - 索引语法.avi │ │ 11. MySQL 高级 - 索引 - 索引设计原则.avi │ │ 12. MySQL 高级 - 视图 - 概述.avi │ │ 13. MySQL 高级 - 视图 - 创建及...

    尚硅谷mysql高级:索引、优化

    在"尚硅谷mysql高级:索引、优化"这个主题中,我们主要关注两个关键概念:索引和优化,这对于提升数据库性能至关重要。 一、MySQL索引 1. 索引类型:MySQL支持多种索引类型,包括B-Tree(默认索引类型)、Hash、...

Global site tag (gtag.js) - Google Analytics