首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL索引,不同的类型,什么时候使用它们?

问MySQL索引,不同的类型,什么时候使用它们?
EN

Stack Overflow用户
提问于 2014-05-19 17:40:37
回答 1查看 13K关注 0票数 5

好了,我已经(重新)搜索了很多关于MySQL索引和它们的重要性,我知道我必须使用它来让数据库查询运行得更快。

我知道在任何字段上添加索引的语法。

但这是我不理解的(我使用Heidi SQL在本地管理数据库)

我有一个包含以下字段的表

代码语言:javascript
复制
id
company_id
author_id
client_id
project_id
title
description
status
date

这里,id是primary key,auto incremented,并且已经是indexed。

我想在company_id、author_id、client_id、project_id上添加一个索引,但这里有几个不同的选项(Heidi SQL:选择字段,右键单击,创建新索引) Key,Unique,Full Text,Spatial

我知道(猜想) Key只会索引字段,Unique会确保字段必须是唯一的,如果我打算在该字段上执行搜索,Full Text索引将是最好的。

Question 1:Spatial做什么,我应该在哪里以及什么时候使用这个索引。

Question 2:在创建和索引时,我有两个选择,要么创建一个新的索引,要么添加到已有的索引中(如主字段的名称)。

创建新索引和添加已有索引有什么不同?为每个不同的字段创建不同名称的索引是一个好主意,还是应该创建/添加相同名称下的所有索引。

感谢您的宝贵时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-21 06:15:13

您应该从一个简单的键索引开始。如果您添加Unique,这可能会产生意想不到的后果,例如,在像company_id这样的列上强制唯一性肯定不会起作用(许多行将共享相同的company_id)。

空间索引仅用于地理编码数据(纬度/经度值),因此这不适用于其中任何一个。当您想要在字段中按字词搜索时,可以使用全文索引,它也不适用于您拥有的数值。此外,Fulltext索引只在MyISAM中可用,而不是INNODB事务引擎,所以如果您想要迁移表,这将是一个障碍。

如果添加到现有索引中,您将在多个列上创建“复合”索引。通常,这不是一个好主意,除非您试图在不是唯一的列上强制索引的唯一性。例如,您可以索引: company_id + id,并在这种情况下使其唯一。但是,索引占用的空间更多,写入速度也会更慢。

总而言之,您应该只对要搜索的列使用普通键索引。对于每个查询,MySQL只使用一个索引,看看它是如何实际访问您可以使用EXPLAIN实用程序访问的数据的。您希望确保它以有效的方式使用索引,以缩小返回或搜索最佳性能所需的行数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23734453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档