首先,我仍然是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设置等也会有所帮助。
非常感谢您的帮助。
答案 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 KEY
或FOREIGN KEY
在keyword
上定义,它也可以作为索引。