2016-05-12 115 views
1

我必须在mysql中使用和不使用索引运行相同的查询。 我创建索引这样的:在mysql中执行带索引和不带索引的查询

create index index_1 on table_1(column_name); 
create index index_2 on table_2(column_name); 

我执行这一点,我得到的结果0行已受到影响,这两个时间。这个可以吗?

因为当我执行我有(后我创建的索引)的查询,它需要我的同时,之前

数据库的视图(无指标): click here for the image

我有多个有关此数据库的小查询,如

SELECT DISTINCT customers.customer_id, customers.customer_name 
FROM customers 
    INNER JOIN accounts ON customers.customer_id = accounts.customer_id 
    INNER JOIN transactions ON transactions.account_id = accounts.account_id 
WHERE transactions.trn_date >= '2011/05/01' 
    AND transactions.trn_date <= '2011/05/31' 
ORDER BY customers.customer_id 
+0

太少的信息。我们需要表定义,查询等。 – jarlh

+1

而索引是? – jarlh

+0

我们必须自行决定在基表上创建2个索引以减少查询的执行时间,并且仍然会有新数据加载时间的轻微增加 – Thodoris

回答

2

您需要这些指标对于查询:

transactions: INDEX(trn_date) 
accounts:  INDEX(account_id) 
customers: INDEX(customer_id) 

在后两种情况下,你可能已经有一个列作为PRIMARY KEY。如果是这样,请不要添加冗余INDEX

1

我执行这一点,我得到的结果0行已受到影响,这两个 ŧ输入法。这个可以吗?

是的,没关系。
有DDL操作创建新的对象,不应该输出的东西。

因为当我执行我的查询(我创建了索引之后),它 像以前那样需要我在同一时间(没有索引)

的查询都没有使用索引。内部优化器根据数据分布做出决定。例如,如果column_name.table_1具有50个唯一值,则不会使用索引。

更多细节您可以同时官方文档中找到:9.3.1 How MySQL Uses Indexes

+0

我们必须自行决定创建2个索引,在基表上以减少查询的执行时间,并且仍然会有新数据加载时间的轻微增加@Pavel Zimogorov – Thodoris

+0

您应该计算用于改进select查询和插入降级的索引的好处。如果你有密集的数据加载,我会建议创建单独的表来检索数据(TRN_SELECT)。并且仅将TRN用于插入数据并选择填充TRN_SELECT的行 –