最新消息:

“会思考的PHPer”主题之四:MySQL索引使用注意事项

MySQL数据库 admin 1126浏览 0评论
  • 能用整型不用字符型。整型处理起来比字符更快。
  • 尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
  • 尽量使用短索引。在较长的char/varchar字段上创建索引时,最好为索引指定前缀长度。
create index indexName on tableName(charField(10))
  • 尽量不在text/blob类型上创建索引。即使要在text/blob上建索引,也一定要指定前缀长度。
create index indexName on tableName(textField(30))
  • 尽量不使用like查找,如果要使用尽量只在右边使用%,如果使用like”%keyword%”或者使用like “%keyword”,会导致索引失效。
  • 不要在索引列上使用MYSQL函数,这会导致索引失效。比如不要这样:select * from users where YEAR(adddate)<2007
  • 不要在唯一性不强(有大量重复值)的字段上加索引,比如性别字段。
  • 根据业务需求,在经常使用where/join的字段上添加加索引。
  • 索引不是越多越好,在insert/update时,可能会重建索引,影响写入效率。
  • 创建联合索引时,要紧密结合实际业务使用需求,注意最左原则的使用。
  • 能使用联合索引就不要使用单列索引。
比如:create index `indexName` on tableName (i1,i2,i3)。
如果不用这个联合索引,而是使用单列索引,那么在执行以下SQL时,
select * from `tableName` where i1=X and i2=Y and i3=Z时,MYSQL只会选择他认为最有效率的单列索引。而使用联合索引的话,会直接定位到符合条件记录。
  • MySQL只对以下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。对于NOT IN和<>操作符,是不会使用索引的。

转载请注明:jinglingshu的博客 » “会思考的PHPer”主题之四:MySQL索引使用注意事项


Warning: Use of undefined constant PRC - assumed 'PRC' (this will throw an Error in a future version of PHP) in /usr/share/nginx/html/wp-content/themes/d8/comments.php on line 17
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址