0

1) 在 mysql 引擎中,MyISAM 更好还是 InnoDB 更好?

2)我想编写一个可以添加多类别帖子的cms 我必须如何设计我的数据库以通过一些查询获得更好的性能?

在 php 中,如何列出例如 = 1 的帖子?

谢谢你

4

2 回答 2

1

1)如果您需要数据库级别的外键关系,请使用 InnoDB 否则使用 MyISAM

2)您可以将所有类别存储在一个具有类似架构的表中

create table categories (
Category_ID int NOT NULL,
ParentCategory_ID int NOT NULL default 0,
CategoryName varchar(150)
);

使用 Category_ID 主键

3)

$sql = select * from posts where category_id = 1;
mysql_query($sql);

编辑:发布表的架构(示例)

create table posts (
    Post_ID int NOT NULL,
    Category_IDs varchar(50) NOT NULL,
    POSTDescription varchar(1000),
    POSTTime int NOT NULL
)

Post_IDposts表的主键。

请注意,Category_IDs 现在是varchar在其中存储类别的值,就像1,2,3您的帖子属于类别 1,2 和 3 一样。要删除属于类别 1 的所有帖子,您将运行以下查询

$sql = DELETE
FROM `posts`
WHERE FIND_IN_SET( '1', `Category_IDs` ) >0;
于 2011-04-15T11:27:09.333 回答
1

没有明确的答案,因为这取决于您的要求,但是很多人已经提到了诸如:

  • innodb 具有行级锁定与 myisam 表锁定,因此 innodb 可以处理更多并发请求。
  • innodb 是事务性的,因此插入通常比 myisam 慢
  • innodb 是一个适当的 RDBMS 引擎,因此支持引用完整性(事务 ACID bla bla bla)
  • innodb 比 myisam 更可靠
  • myisam 的读取速度比 innodb 快(神话)
  • myisam 表的占用空间比 innodb 的要小(神话)

然而,没有多少人会提到innodb 聚集主键索引,以及因此设计良好的 innodb 表如何轻松地执行等效的 myisam 表。

这里有两个解释聚集索引的链接:

http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html

http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

另外,请查看以下示例和文章(第二个示例可能特别相关)

希望这可以帮助 :)

于 2011-04-15T11:43:23.917 回答