Mysql 何时/为什么使用(组合)索引?

Mysql 何时/为什么使用(组合)索引?,mysql,sql,database,performance,indexing,Mysql,Sql,Database,Performance,Indexing,在进行数据库性能测试的项目时,我开始添加索引。 在网上冲浪的大部分时间里,我仍然有几个问题要问 在哪个表/列上放置索引是个好主意? 我有不同类型的表格,例如一个充满预定义国家名称的表格。因此,我认为在country\u name列中添加索引是一个好主意。我知道这很好,因为我很有可能不得不向该表中添加新记录,在where子句中使用country\u name时,查询会更快 但是,对于更复杂的表,如client(或任何其他可能会有很多机会并且包含大量列的表),该怎么办呢 那么组合索引呢? 当组合索引

在进行数据库性能测试的项目时,我开始添加索引。 在网上冲浪的大部分时间里,我仍然有几个问题要问

在哪个表/列上放置索引是个好主意?

我有不同类型的表格,例如一个充满预定义国家名称的表格。因此,我认为在
country\u name
列中添加索引是一个好主意。我知道这很好,因为我很有可能不得不向该表中添加新记录,在where子句中使用
country\u name
时,查询会更快

但是,对于更复杂的表,如client(或任何其他可能会有很多机会并且包含大量列的表),该怎么办呢

那么组合索引呢?

当组合索引是一个好主意时,是在我将查询大量客户的
first\u name
last\u name
放在一起的时候吗?还是将单独的索引添加到这两列中更好

悖论?

读了stackoverflow之后,我发现了一个悖论。知道数据将显著增加,这是我添加索引的原因。但同时会降低它的速度,因为索引会降低更新/插入的速度

e、 g.我必须每天记录
客户的体重
(>3M记录)。添加索引将帮助我更快地获得结果。但我每天会获得大约1000个新客户,所以我必须插入他们并更新他们的权重。这意味着由于插入/更新而导致性能降低

mySQL特定添加

不同的存储引擎结合索引是否有优势?
到目前为止,我只使用innoDB。

好的,你需要知道两件事:索引用于提高搜索速度(选择),但会减慢更改速度(插入/更新/删除)。如果你需要制作曲目,请尝试仅使用表格来收集信息,而另一个表格用于搜索有关曲目的信息。例如:

表跟踪(ip、日期、页面等) 表小时跟踪(页码、编号、访客、日期)


在表跟踪中,您将只添加,不更新或删除。您将使用cronjob(或athor thenique)生成的表hour\u track,并在其中添加组合索引(most\u search、secound\u most\u search,…)。组合索引将提高您的速度,因为您的数据库只需要重新生成1个arbores,而不是更多,如果您需要为某个列创建索引,因为该列更多地用于您的查询,您可以将该列添加到索引声明的第一个列中。你可以更红

好的,你需要知道两件事:索引用于提高搜索速度(选择),但会减慢更改速度(插入/更新/删除)。如果你需要制作曲目,请尝试仅使用表格来收集信息,或使用表格来搜索有关曲目的信息。例如:

表跟踪(ip、日期、页面等) 表小时跟踪(页码、编号、访客、日期)


在表跟踪中,您将只添加,不更新或删除。您将使用cronjob(或athor thenique)生成的表hour\u track,并在其中添加组合索引(most\u search、secound\u most\u search,…)。组合索引将提高您的速度,因为您的数据库只需要重新生成1个arbores,而不是更多,如果您需要为某个列创建索引,因为该列更多地用于您的查询,您可以将该列添加到索引声明的第一个列中。你可以更红

好的,你需要知道两件事:索引用于提高搜索速度(选择),但会减慢更改速度(插入/更新/删除)。如果你需要制作曲目,请尝试仅使用表格来收集信息,或使用表格来搜索有关曲目的信息。例如:

表跟踪(ip、日期、页面等) 表小时跟踪(页码、编号、访客、日期)


在表跟踪中,您将只添加,不更新或删除。您将使用cronjob(或athor thenique)生成的表hour\u track,并在其中添加组合索引(most\u search、secound\u most\u search,…)。组合索引将提高您的速度,因为您的数据库只需要重新生成1个arbores,而不是更多,如果您需要为某个列创建索引,因为该列更多地用于您的查询,您可以将该列添加到索引声明的第一个列中。你可以更红

好的,你需要知道两件事:索引用于提高搜索速度(选择),但会减慢更改速度(插入/更新/删除)。如果你需要制作曲目,请尝试仅使用表格来收集信息,或使用表格来搜索有关曲目的信息。例如:

表跟踪(ip、日期、页面等) 表小时跟踪(页码、编号、访客、日期)

在表跟踪中,您将只添加,不更新或删除。您将使用cronjob(或athor thenique)生成的表hour\u track,并在其中添加组合索引(most\u search、secound\u most\u search,…)。组合索引将提高您的速度,因为您的数据库只需要重新生成1个arbores,而不是更多,如果您需要为某个列创建索引,因为该列更多地用于您的查询,您可以将该列添加到索引声明的第一个列中。你可以更详细地阅读

我将把重点放在问题的“组合索引”部分,但用它来涵盖其他几点,我认为这将帮助你更好地理解索引

那么组合索引呢?

当组合索引是一个很好的主意时,我会用他们的名字和姓氏一起查询很多客户机吗?还是将单独的索引添加到这两列中更好

索引就像电话簿一样。电话簿是一个表格,其中包含
地址
、电话号码等字段。此表在
姓、名
上有索引。这就是你所说的
SELECT * FROM PhoneBook WHERE  First_Name = 'John' and Last_Name = 'Smith';