<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>索引 on 月盾的博客</title>
    <link>https://blog.hopefly.top/tags/%E7%B4%A2%E5%BC%95/</link>
    <description>Recent content in 索引 on 月盾的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 16 Oct 2015 09:00:52 +0000</lastBuildDate>
    <atom:link href="https://blog.hopefly.top/tags/%E7%B4%A2%E5%BC%95/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>数据表索引如何建立？多列索引还是单列索引</title>
      <link>https://blog.hopefly.top/blogdetail/5620bcc461248de07b018879/</link>
      <pubDate>Fri, 16 Oct 2015 09:00:52 +0000</pubDate>
      <guid>https://blog.hopefly.top/blogdetail/5620bcc461248de07b018879/</guid>
      <description>&lt;p&gt;数据库优化第一想到的应该是建立索引，而且是最快速有效的优化方式，一般是对where子句中的字段建立索引，但是并不是越多越好，对于基数(区分度)越大的效果越好，比如唯一索引。对于一些表示状态的，比如值为0,1这类区分状态的字段就算数据再多索引的基数也很小，这类字段并不是非要加索引，加的索引越多越占磁盘空间，每次写入数据都要更新大量索引，反而成为累赘。但是不要以为真的没必要加，初学者对索引的认识浅薄，要么不加索引，要么在建表时就妄自推断加了很多索引。那么如何加索引才是正确的做法呢？&lt;/p&gt;&#xA;&lt;p&gt;数据库中有一种是单列索引，一种是多列索引，要怎么加需要搞清楚这两者的区别，当查询条件有多个字段时，单列索引和多列索引有很大的区别。&lt;br&gt;&#xA;如果使用多列索引，where条件中字段的顺序非常重要，需要满足最左前缀列。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;最左前缀：查询条件中的所有字段需要从左边起按顺序出现在多列索引中，查询条件的字段数要小于等于多列索引的字段数，中间字段不能存在范围查询的字段(&amp;lt;,like等)，这样的sql可以使用该多列索引。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;mysql多列索引适合的场景&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;全字段匹配&lt;/li&gt;&#xA;&lt;li&gt;匹配部分最左前缀&lt;/li&gt;&#xA;&lt;li&gt;匹配第一列&lt;/li&gt;&#xA;&lt;li&gt;匹配第一列范围查询(可用用like a%,但不能使用like %b)&lt;/li&gt;&#xA;&lt;li&gt;精确匹配某一列和和范围匹配另外一列&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;order by操作中出现的字段同样适用于按值查找的规则，where+order by中出现的字段需可以建立满足如上五种规则多列索引。 使用多列需要按照最左索引列查找；不能跳过中间列；如果某一列是范围查询，那么其右边所有列无法使用索引。 IN什么情况下是范围查询，什么情况下是多个等值查询？如果有order by排序时，多个等于条件查询就是范围查询，没有order by排序就没有限制。 例如,建立多列索引(name, age, id), 只能使用索引的前两列。in是范围查询 &amp;hellip; where name=&amp;ldquo;nginx.cn&amp;rdquo; and age in(15,16,17) order by id 可以使用整个索引，in是按值查询 &amp;hellip; where name=&amp;ldquo;nginx.cn&amp;rdquo; and age in(15,16,17) and id =&amp;ldquo;3&amp;rdquo;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
