MYSQL使用索引的方法-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

MYSQL使用索引的方法

简介:
如何建立索引
 
· 索引通常被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度。所以我们选择索引的列也通常选择出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。
· 选择索引时,需要考虑数据列的基数。所谓基数,是指数据列所包含的不同的数据的个数。如果基数相对于数据表行数较高的话,索引的效果比较好。换句话说,就是指数据列的不同的值越多,索引效果越好。如果一个数据列只包含:0或者1两个值的话,索引的用处就不大。如果值出现的几率几乎相等,那么无论搜索哪个值都可能得到一半的数据行。在这些情况下,最好根本不要使用索引。
· 索引值较短的值,所选择的数据类型也尽可能的要小一些。譬如:如果TEXT能满足需求的话,我们就不需要用MEDIUTEXT。
· 如果建立联合索引的话,譬如对:t1,t2,t3建立联合索引的话,同时也是对t1和t1,t2建立了索引。但是如果单独指定t2、t3、t1t3、t2t3的值的话,都会用不到索引。
sql语句中如何避免没有使用索引的情况
首先先了解一下mysql优化器的工作原理:MySQL查询优化器最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行。所以当我们提交查询语句时,如果优化器排除不符合条件的数据的速度越快,那么查询的结果也会越快。
·尽量比较数据类型相同的数据列。例如,INT与BIGINT是不同的。CHAR(10)被认为是CHAR(10)或VARCHAR(10),但是与CHAR(12)或VARCHAR(12)不同。
·尽量不要在where子句中对索引列使用表达式或者函数。如果你在索引列使用函数调用或者更复杂的算术表达式,MySQL就不会使用索引,因为它必须计算出每个数据行的表达式值。
   WHERE mycol < 4 / 2 使用索引
   WHERE mycol * 2 < 4 没有使用索引
· 在使用LIKE时,尽量不要在开头使用通配符。
    WHERE col_name LIKE ’%string%’
    WHERE col_name LIKE ’abc%’
· 不要使用类型转换。如果某个索引列是int型,而在查询时,赋值为字符型,将使用不了索引。
    SELECT * FROM mytbl WHERE num_col = 1;使用索引
    SELECT * FROM mytbl WHERE num_col = ‘1’;没有使用索引
·在SELECT语句中可以使用STRAIGHT_JOIN关键字来重载优化器的选择。
    SELECT STRAIGHT_JOIN ... FROM t1, t2, t3 ... ;
    SELECT ... FROM t1 STRAIGHT_JOIN t2 STRAIGHT_JOIN t3 ... ;
本文转自博客园执着的笨蛋的博客,原文链接:MYSQL使用索引的方法,如需转载请自行联系原博主。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章
最新文章
相关文章