<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Mysql - 标签 - 开发者技术小屋</title>
        <link>https://www.developerhome.net/tags/mysql/</link>
        <description>Mysql - 标签 - 开发者技术小屋</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 17 Apr 2017 09:20:26 &#43;0000</lastBuildDate><atom:link href="https://www.developerhome.net/tags/mysql/" rel="self" type="application/rss+xml" /><item>
    <title>百万级日志型数据另类分表方式</title>
    <link>https://www.developerhome.net/archives/47/</link>
    <pubDate>Mon, 17 Apr 2017 09:20:26 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/47/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-47.jpg" referrerpolicy="no-referrer">
            </div><p>对于时间性比较强的数据，比如日志类型、登录日志这样的数据，一般我们会建立一个日志表来存储，而当日志量超过百万级，则一个表来存储，将会造成很大的查询问题，而且对于日志数据，我们查询常常使用的是倒序查询，每页也仅仅查询几十条到几百条，查询效率会很差，因此必然会分表，那如何分表？在分表后又如何解决多表查询的问题呢？下面我就来推荐一种另类的分表方式</p>
<p>假设有这样一个日志类：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-php">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Logs</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">private</span> <span class="nv">$id</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">private</span> <span class="nv">$contents</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">private</span> <span class="nv">$datetime</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">(</span><span class="nv">$contents</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">contents</span> <span class="o">=</span> <span class="nv">$contents</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">datetime</span> <span class="o">=</span> <span class="nx">date</span><span class="p">(</span><span class="s1">&#39;Y-m-d H:i:s&#39;</span><span class="p">,</span> <span class="nx">time</span><span class="p">());</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">public</span> <span class="k">function</span> <span class="nf">save</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&#34;INSERT INTO `logs`(`contents`, `datetime`) VALUES(&#39;</span><span class="si">{</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">contents</span><span class="si">}</span><span class="s2">&#39;, &#39;</span><span class="si">{</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">datetime</span><span class="si">}</span><span class="s2">&#39;)&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># 执行sql，插入到数据库中，并返回插入的日志id, 此处省略过程
</span></span></span><span class="line"><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">id</span> <span class="o">=</span> <span class="nv">$insert_id</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">id</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
<p>通过日志类的结构，我们建立一个数据表</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-sql">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="o">`</span><span class="n">logs</span><span class="o">`</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="o">`</span><span class="n">id</span><span class="o">`</span><span class="w"> </span><span class="nb">int</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="n">UNSIGNED</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"> </span><span class="n">AUTO_INCREMENT</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="o">`</span><span class="n">contents</span><span class="o">`</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="o">`</span><span class="n">datetime</span><span class="o">`</span><span class="w"> </span><span class="n">datetime</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="k">PRIMARY</span><span class="w"> </span><span class="k">KEY</span><span class="w"> </span><span class="p">(</span><span class="o">`</span><span class="n">id</span><span class="o">`</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">)</span><span class="w"> </span><span class="n">ENGINE</span><span class="o">=`</span><span class="n">MyISAM</span><span class="o">`</span><span class="w"> </span><span class="k">DEFAULT</span><span class="w"> </span><span class="nb">CHARACTER</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="n">utf8</span><span class="w"> </span><span class="k">COLLATE</span><span class="w"> </span><span class="n">utf8_general_ci</span><span class="p">;</span></span></span></code></pre></div></div>
<p>一般来说，单表情况下，我们的id为自增。现在我们来分析这个日志类的特点：</p>]]></description>
</item>
</channel>
</rss>
