2

首先,我对 PHP / mySQL 还是很陌生,所以如果它对你来说太简单了,请原谅我的问题 :)

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

结构基本上是:

id、关键字、标题、描述、url、排名、哈希

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索引和东西一无所知,但我读到如果你有一些索引它可以提高速度。

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

你会建议我做什么。我应该将关键字字段设置为 INDEX 还是必须观看其他内容?由于我对索引没有真正的线索,因此感谢您的帮助,这意味着我不知道我是否应该使用索引,或者我是否必须将它们用于关键字、标题、描述等所有内容......

数据库会经常更新——以防万一。

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

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

非常感谢您的帮助。

4

2 回答 2

1

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

一般来说,您应该在where子句中使用的字段上放置一个索引。这样,数据库可以真正快速地限制数据并返回结果。

于 2012-10-28T19:46:02.260 回答
1

你的直觉是正确的——如果你只是keyword在你的WHERE子句中过滤,它应该被索引,如果你这样做,你可能看到一些执行速度的提高。

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

您可能正在使用像 PHPMyAdmin 这样的客户端,它使索引创建比执行命令更容易,但请查看CREATE INDEX. 您的案例非常普通,因此您不需要任何特殊选项。

尽管对您来说不是这种情况(正如您所说,每个 最多有 10 行keyword),但如果您已经有一个唯一约束或PRIMARY KEYFOREIGN KEY定义在 上keyword,它也可以用作索引。

于 2012-10-28T19:46:12.220 回答