`

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数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。

    MySQL Innodb 索引原理详解

    MySQL Innodb 索引原理详解

    mysql存储与索引技术

    介绍mysql不同的存储引擎 以及 索引技术在mysql中的应用

    MySQL索引原理及如何建立高效索引.pptx

    《MySQL索引原理及如何建立高效索引.pptx》主要讲述mysql数据库索引底层原理、作用、 索引使用、索引失效等核心技术点。非常实用!!!

    为mysql数据库建立索引.docx

    为mysql数据库建立索引.docx

    Mysql事务及索引

    一、数据库索引概述; 二、数据库索引分类; 三、Mysql数据库管理索引; 四、数据库事务概述; 五、数据库事务特性; 六、Mysqk数据库管理事务;

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

    包含mysql简介、索引介绍、索引引用策略、索引失效场景等

    MySQL数据库:索引概述.pptx

    索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。 索引提供指针以指向...

    MySQL何时使用索引,何时不使用索引

    MySQL何时使用索引,何时不使用索引,归纳的还算详细,可以看看。

    MYSQL创建索引全过程

    代码复制粘贴 改下里面的参数 就可以用 而且参数 也有说明 简单易懂

    给MySQL建立索引1

    为mysql数据库建立索引前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用

    mysql中创建各种索引的语句整理.pdf

    Mysql中创建各种索引的语句整理 代码 添加PRIMARY KEY(主键索引) 添加UNIQUE(唯一索引) 添加INDEX(普通索引) 添加FULLTEXT(全文索引) 添加多列索引 ) mysql>ALTER TABLE `...

    mysql索引导出删除

    mysql索引导出删除

    MySQL之高效覆盖索引

    MySQL之高效覆盖索引

    MySQL索引优化课件

    MySQl索引优化课件,详细得介绍了MySQl索引优化数据库

    MySQL 索引最佳实践

    MySQL 索引最佳实践很不错,虽然是英文版

    尚硅谷Java视频教程_MySQL高级视频

    尚硅谷_MySQL高级_索引分类和建索引命令语句 · 17.尚硅谷_MySQL高级_索引结构与检索原理 · 18.尚硅谷_MySQL高级_哪些情况适合建索引 · 19.尚硅谷_MySQL高级_哪些情况不适合建索引 · 20.尚硅谷_MySQL高级_...

    MySQL实用教程课后答案

    MySQL实用教程(高等学校计算机教材) 郑阿奇 第1章 数据库的基本概念 第2章 数据库和表 第3章 表数据操作 第4章 数据库的查询和视图 第5章 索引与数据完整性约束 第6章 MySQL语言结构 第7章 过程式数据库对象 第8章 ...

    MySQL索引最佳实践

    讲座的一个ppt分享 1. MySQL的索引类型选择 2. MySQL数据结构分析 3. MySQL的引擎类型分析

    mysql添加索引.pdf

    mysql添加索引

Global site tag (gtag.js) - Google Analytics