mysql查询和索引怎么做

mysql查询和索引怎么做,mysql,Mysql,我需要人手索引一张大桌子!我对索引mysql表一无所知 这是我从表中排序行时的查询 SELECT "posts.* AS `posts` , user.nickname AS nickname FROM `posts` LEFT JOIN user AS user ON (user.userid = posts.userid )

我需要人手索引一张大桌子!我对索引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
                      "

在向表中插入新帖子后,如何使用索引对该表进行索引?或者通过提醒表何时何地可以使用索引表以及如何使用?请帮助

您只需添加一次索引。无需担心每次插入后都会执行任何操作。根据您在帖子中的内容,我将尝试以下内容:

CREATE INDEX posts_userid_idx ON posts(userid);
如果这似乎不太管用,我会建议您检查,看看是否有任何可用的选项适用于您的情况

根据你的(修改过的)评论,你也应该在posted上添加一个主键

ALTER TABLE posts ADD PRIMARY KEY (postid);

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

您只需要添加一次索引。无需担心每次插入后都会执行任何操作。根据您在帖子中的内容,我将尝试以下内容:

CREATE INDEX posts_userid_idx ON posts(userid);
如果这似乎不太管用,我会建议您检查,看看是否有任何可用的选项适用于您的情况

根据你的(修改过的)评论,你也应该在posted上添加一个主键

ALTER TABLE posts ADD PRIMARY KEY (postid);

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

只需创建索引并定义其工作方式。那你就没事干了。如果SQL存储引擎认为应该使用索引,他会使用它。当您创建或更新数据时,它将得到维护

现在,最难的部分是索引的定义

您可以将索引视为顺序,就像使用电话簿时一样。您的电话簿是按城市、姓氏和名订购的。它是一个存储在表附近的oreder,引擎可以使用它来更快地查找结果,如果他需要读取整个表数据的话

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

搜索数据时,索引非常重要。在纽约你很容易找到叫史密斯的人。在美国所有的城市(有电话簿)都很难找到史密斯一家

在查询中,有两条指令可能会从索引中受益。您正在按用户过滤,然后按时间戳排序

如果您按用户创建了一个索引,然后加上时间戳,那么引擎只需读取该索引就已经有了查询的解决方案

所以我要创建一个:

CREATE index posts_user_and_timestamp_idx ON posts(userid, timestamp DESC);
这个索引可以重复用于所有查询,在这些查询中,你只需通过用户进行过滤(比如电话簿,你可以很容易地提取关于一个城市的页面)。但不适用于唯一过滤器是时间戳的查询(您只需要时间戳上的索引,很难从电话簿中提取所有城市的所有smith)


因此,实际上索引的主要问题是它们严重依赖于您通常对数据库使用的查询。如果您从未对表使用过相同类型的查询,那么您将需要大量不同的索引。而索引是一种很重要的东西。大多数表使用的索引物理空间比数据多3或4个。

只需创建索引并定义其工作方式即可。那你就没事干了。如果SQL存储引擎认为应该使用索引,他会使用它。当您创建或更新数据时,它将得到维护

现在,最难的部分是索引的定义

您可以将索引视为顺序,就像使用电话簿时一样。您的电话簿是按城市、姓氏和名订购的。它是一个存储在表附近的oreder,引擎可以使用它来更快地查找结果,如果他需要读取整个表数据的话

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

搜索数据时,索引非常重要。在纽约你很容易找到叫史密斯的人。在美国所有的城市(有电话簿)都很难找到史密斯一家

在查询中,有两条指令可能会从索引中受益。您正在按用户过滤,然后按时间戳排序

如果您按用户创建了一个索引,然后加上时间戳,那么引擎只需读取该索引就已经有了查询的解决方案

所以我要创建一个:

CREATE index posts_user_and_timestamp_idx ON posts(userid, timestamp DESC);
这个索引可以重复用于所有查询,在这些查询中,你只需通过用户进行过滤(比如电话簿,你可以很容易地提取关于一个城市的页面)。但不适用于唯一过滤器是时间戳的查询(您只需要时间戳上的索引,很难从电话簿中提取所有城市的所有smith)


因此,实际上索引的主要问题是它们严重依赖于您通常对数据库使用的查询。如果您从未对表使用过相同类型的查询,那么您将需要大量不同的索引。而索引是一种很重要的东西。大多数表使用的索引物理空间比数据多3或4个。

您应该找到一个适用于您的MySQL管理工具,因为对dbs进行架构更改(包括添加索引)是一项非常常见的任务

我使用MySQL Workbench进行大多数模式操作,包括在表上设置索引。这是一个免费的mySQL数据库管理应用程序。如果你没有,下载它

在Workbench中打开您的db,右键单击要添加索引的表,然后选择