1)在mysql引擎中,MyISAM是更好还是InnoDB?
2)我想编写一个cms,它可以添加多类别的帖子 我如何设计我的数据库以通过一些查询获得更好的性能?
在php中如何列出帖子哪个类别例如= 1?
谢谢
答案 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_ID
是posts
表的主键。
请注意,如果您的帖子属于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群集主键索引以及设计良好的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/
另外,请看下面的例子和文章(第二个例子可能有特别的相关性)
5亿行论坛/帖子示例
1.25亿行产品/类别示例
Rewriting mysql select to reduce time and writing tmp to disk
1亿行实验
Optimal MySQL settings for queries that deliver large amounts of data?
Innodb vs. myisam vs. falcon benchmarkmarks
http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/
希望这会有所帮助:)