2关于更好地优化数据库设计的问题

时间:2011-04-15 11:20:31

标签: php mysql database-design database-optimization

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

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

在php中如何列出帖子哪个类别例如= 1?

谢谢

2 个答案:

答案 0 :(得分:1)

1)如果你需要DB级别的外键关系,请使用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表的主键。

请注意,如果您的帖子属于cateory 1,2和3,则Category_ID现在varchar存储类别中的类别1,2,3,并且要删除属于类别1的所有帖子,您将运行以下查询

$sql = DELETE
FROM `posts`
WHERE FIND_IN_SET( '1', `Category_IDs` ) >0;

答案 1 :(得分: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/

另外,请看下面的例子和文章(第二个例子可能有特别的相关性)

希望这会有所帮助:)