MySQL - 如何优化表的速度

时间:2012-10-28 19:41:27

标签: mysql

首先,我仍然是PHP / mySQL的新手,请原谅我的问题,如果它对你来说太简单了:)

这是我的问题:我目前正在将大量数据存储到mysql数据库中。它基本上是我儿子学校的档案目录。

结构基本上是:

id,关键字,标题,说明,网址,排名,哈希

id is int 11
keyword is varchar 255
title is varchar 255
description is text
url is varchar 255
rank is int 2
hash is varchar 50

我们计划插入包含上述字段的大约1000万行,我的任务是能够尽快查询数据库。

我的查询始终是一个确切的关​​键字。

例如:

select * from table where keyword = "keyword" limit 10

我真的只需要查询关键字而不是标题或描述或其他任何内容。每个关键字最多有10个结果 - 永远不会更多。

我对mysql索引和东西没有真正的线索,但我读到如果你有一些索引它可以提高速度。

现在,我需要Pro的帮助。我的任务是能够运行尽可能快的查询,因此查询数据库不会花费太长时间。由于我只查找关键字字段,因此我确信有一种方法可以确保即使您有数百万行,也可以快速返回结果。

你有什么建议我应该这样做。我应该将关键字字段设置为INDEX还是我必须查看其他内容?由于我对INDEXES没有真正的线索,所以我很感激你的帮助,这意味着我不知道我是否应该使用索引,或者我是否必须将它们用于关键字,标题,描述等所有内容...... < / p>

数据库经常更新 - 万一重要。

您是否认为甚至可以在不到一秒的时间内存储数百万行并进行查询?

任何其他建议,如自定义my.cnf设置等也会有所帮助。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

keyword列上添加索引。它会显着提高速度。那么以毫秒为单位查询数据应该没问题。

在generel中,您应该在where子句中为您使用的字段添加索引。这样,DB可以非常快速地限制数据并返回结果。

答案 1 :(得分:1)

你的直觉是正确的 - 如果你只是在你的keyword子句中对WHERE进行过滤,那么它应该被编入索引,你可能会 看到一些执行速度的提高做。

CREATE INDEX `idx_keyword` ON `yourtable` (`keyword`)

您可能正在使用像PHPMyAdmin这样的客户端,它使索引创建比执行命令更容易,但请查看the MySQL documentation on CREATE INDEX。你的是一个非常普通的案例,所以你不需要任何特殊的选择。

虽然情况并非如此(正如您所说,每keyword最多会有10行),如果您已有唯一约束或PRIMARY KEYFOREIGN KEYkeyword上定义,它也可以作为索引。