如何有效地创建多列索引?

时间:2019-02-22 05:19:06

标签: mysql indexing

假设我已经编码。

<%= f.fields_for :questions do |question_form| %>
    <%= question_form.text_field :question_text %>
    <%= question_form.select :question_type, [ 'TEXT', 'OPTIONS', 'UPLOAD' ], :prompt => 'Select One', :id => "my_id", :onchange => "myFunction()" %>
    <%= question_form.link_to_remove "Remove this Question" %>
    <%= question_form.fields_for :options do |option_form| %>
        <%= option_form.text_field :option_text %>
        <%= option_form.link_to_remove "Remove this option" %>
    <% end %>
    <p id = "test" hidden><%= question_form.link_to_add "Add a option", :options %></p>
    <script>
    function myFunction(){
        var x = document.getElementById("my_id").value;
        if (x == "OPTIONS") {
                document.getElementById("test").hidden = false;
        }
    }
    </script>
<% end %>

将在

中使用use_index
create index use_index on tbl_nm (col2 ,col3 ,col4 ,col5);

此外,我们应该通过在左侧排列最唯一的索引,在右侧排列最常见的索引来创建索引。对吧?

如果我想订购查询结果,我也应该将该列添加到索引中吗?

1 个答案:

答案 0 :(得分:0)

索引应至少是常见查询中首先使用的引用,然后是按范围搜索列。

因此,在您的示例中,col2col3将使用此索引。但是由于没有col4,因此搜索col5的速度将不会很快。也就是说,将扫描所有col4col2匹配“某物”的col3项,以找到匹配的col5

如果您搜索的是col4而不是col5,那么它将是对所需项目的二进制搜索。

使用EXPLAIN {query}显示索引的使用情况。

实际上没有考虑按索引的顺序考虑唯一性或唯一性。