mysql查询和索引怎么做

时间:2011-12-22 17:24:30

标签: mysql

我需要手来索引一张大桌子!我不知道索引mysql表

这是我从表

订购行时的查询
                     SELECT  "posts.* AS `posts` , user.nickname AS nickname
                      FROM `posts`
                       LEFT JOIN user AS user ON (user.userid = posts.userid )
                       WHERE
                        posts.userid= '" . intval($bbinfo['userid']) . "'
                       ORDER BY posts.timestamp DESC
                       LIMIT $start , $_limit
                      "

如何在将新帖子发送到表后使用索引来索引此表?或者通过警告表格我可以在何时何地使用索引表以及如何使用?请帮忙

3 个答案:

答案 0 :(得分:2)

只需创建索引并定义其工作方式即可。然后你无事可做。如果SQL存储引擎认为应该使用您的索引,他将使用它。当您创建或更新数据时,它将被维护。

现在困难的部分是索引的定义

您可以将索引视为订单,例如使用电话簿时。您的电话簿按城市排序,然后按姓氏排序,然后按名字排序。这是一个存储在桌子附近的矿工,发动机可以用来比他需要读取整个表格数据时更快地找到结果。

在电话簿中只有一个索引,因此数据按该索引排序。在数据库中,您可以拥有多个索引,因此它们存储在表附近并包含指向实际数据地址的指针。

搜索数据时,索引非常重要。您可以轻松地在纽约找到姓名史密斯的人。在美国所有城市都很难找到史密斯(带电话簿)。

在您的查询中,您有两条可能受益于索引的说明。您按用户过滤,然后按时间戳排序

如果您按用户创建索引,然后通过简单地读取索引,引擎就已经拥有了查询解决方案。

所以我会创建这个:

CREATE index posts_user_and_timestamp_idx ON posts(userid, timestamp DESC);

此索引可以重复用于您只是被用户过滤的所有查询(例如电话簿。您可以轻松提取有关一个城市的页面)。但不适用于唯一过滤器是时间戳的查询(您只需要时间戳上的索引,很难从电话簿中提取所有城市的所有史密斯)。

事实上,索引的主要问题是它们在很大程度上取决于您通常在数据库中使用的查询。如果您从未在表上使用相同类型的查询,那么您将需要许多不同的索引。索引是一个需要占据一席之地的东西。大多数表使用3或4个物理空间用于索引而不是数据。

答案 1 :(得分:2)

您应该找到适合您的 MySQL管理工具,因为架构更改为您的dbs,包括添加索引是一项非常常见的任务。

我使用 MySQL Workbench 来执行大部分架构操作,包括在表上设置索引。这是mySQL dbs的免费管理应用程序。如果你没有,请下载它。

http://dev.mysql.com/downloads/workbench/5.1.html

在Workbench中打开你的数据库,右键单击表格添加索引并选择Alter Table ...然后点击窗口底部的索引,你会看到类似的东西:

enter image description here

你也可以使用 PHPMyAdmin ,这有点复杂,有点难以安装,恕我直言。

我深入到我的Program Files目录(Windows XP)中找到PHPMyAdmin可执行文件 - 它启动了应用程序。

从PHPMyAdmin 3.2.1 - 打开您的架构。单击表格 - 它会显示一个GUI菜单,使您可以使用带有要编制索引的列右侧的照明螺栓的图标轻松指定索引。 enter image description here

答案 2 :(得分:1)

您只需要添加一次索引。每次INSERT后都无需担心做任何事情。根据你在帖子中的内容,我会尝试这样的事情:

CREATE INDEX posts_userid_idx ON posts(userid);

如果这看起来效果不好,我会建议您查看MySQL Documentation on CREATE INDEX,看看是否有任何可用选项适用于您的情况。

根据您的(修订)评论,您还应该在postid上添加PRIMARY KEY。

ALTER TABLE posts ADD PRIMARY KEY (postid);

是的,您应该能够像在任何其他查询中一样在MySQL Workbench中运行这两个命令。