2012-10-28 50 views
2

首先,我仍然很新的PHP/MySQL的所以原谅我的问题,如果实在是太简单了,你:)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还是必须观看其他内容?由于我没有关于INDEXES的真实线索,所以我们不胜感激,也就是说我不知道​​我是否应该使用索引,或者如果我必须将它们用于关键字,标题,描述等所有内容......

数据库经常更新 - 以防事件发生。

您是否认为甚至可以存储数百万行并在不到一秒钟内完成查询?

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

非常感谢您的帮助。

回答

1

你的直觉是正确的 - 如果你是在keywordWHERE条款进行筛选,它应该被索引,你可能会看到一些运行速度的提高,如果你做的。

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

您可能使用如phpMyAdmin之类的客户端,这使得创建索引比执行命令更容易,但回顾the MySQL documentation on CREATE INDEX。你是一个非常普通的案例,所以你不需要任何特殊的选择。

虽然这是不适合你的情况下(如你说会有高达每keyword 10行),如果你已经对keyword定义的唯一约束或PRIMARY KEYFOREIGN KEY,它将作为一个指标充当好。

1

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

在generel你应该换田野上你的索引使用在你where条款。这样,数据库可以非常快速地限制数据并返回结果。