大多数网站的内容都存储在数据库中,用户通过请求访问内容。数据库非常快,有很多技巧可以让您优化数据库的速度,这样您就不会浪费服务器资源。在本文中,我列出了优化数据库速度的十个技巧。1.精心设计数据库第一个技巧看似理所当然,但实际上大多数数据库问题都来自设计不当的数据库结构。例如,我见过客户信息和付款信息存储在同一个数据库列中的示例。这对系统和数据库开发人员来说很糟糕。创建新数据库时,将信息存储在单独的表中,使用标准命名约定并使用主键。资料来源:http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/2。知道你需要优化什么如果你想优化某条查询语句,清楚地知道这条语句的结果是非常有帮助的。使用EXPLAIN语句,你会得到很多有用的信息,我们来看一个例子:EXPLAINSELECT*FROMref_table,other_tableWHEREref_table.key_column=other_table.column;来源:http://dev.mysql.com/doc/refman/5.0/en/using-explain.html3.最快的查询...是您没有发送的查询。每次向数据库发送语句时,都会消耗大量的服务器资源。所以在一个高流量的网站中,最好的办法就是缓存你的查询语句。缓存语句的方法有很多种,这里介绍几种:AdoDB:AdoDB是一个用于PHP的数据库简化库。有了它,您可以从不同的数据库系统(MySQL、PostGreSQL、Interbase等)中进行选择,它专为速度而设计。AdoDB提供了一个简单但功能强大的缓存系统。此外,AdoDB拥有BSD许可证,因此您可以在您的项目中免费使用它。对于商业项目,它也根据LGPL获得许可。Memcached:Memcached是一种分布式内存缓存系统,可以减少数据库的负载以加快基于动态数据库的网站。CSQLCache:CSQLCache是一种开源数据缓存架构。我没试过,但看起来真的不错。4.不要选择你不需要的东西来获取你想要的数据。一种非常常见的方法是使用*字符,它将列出所有列。选择*FROMwp_posts;但是,您应该只列出您需要的列,如下所示。如果你在一个非常小的网站上,比如说,一个用户访问一分钟,它可能不会有什么不同。但是,如果您有像CatsWhoCode这样的高流量站点,这可以为数据库节省大量工作。从wp_posts选择标题、摘录、作者;5、使用LIMIT只获取一定行数的数据是很常见的。例如,博客每页仅显示十篇文章。这时候你应该使用LIMIT来限制你要选择的数据行数。如果没有LIMIT,表有100,000行数据,你会遍历所有行,这对服务器是一种不必要的负担。选择标题、摘录、作者FROMwp_postsLIMIT10;6.避免循环查询在PHP中使用SQL时,可以将SQL放在循环语句中。但是这样做会给您的数据库带来负担。下面的例子说明了“在循环语句中嵌套查询语句”的问题:foreach($display_orderas$id=>$ordinal){$sql="UPDATEcategoriesSETdisplay_order=$ordinalWHEREid=$id";mysql_query($sql);} 您可以这样做:UPDATEcategories SETdisplay_order=CASEid WHEN1THEN3 WHEN2THEN4 WHEN3THEN5 ENDWHEREidIN(1,2,3)来源:http://on.cokarl.英国/文章/sql/update-multiple-rows-with-different-values-and-a-single-sql-query/7。使用join代替子查询程序员可能喜欢使用子查询,甚至滥用子查询。下面的子查询非常有用:SELECTa.id, (SELECTMAX(created) FROMposts WHEREauthor_id=a.id) ASlatest_postFROMauthorsa虽然子查询很好用,但是join语句可以代替它,join语句执行得更快。 SELECTa.id,MAX(p.created)ASlatest_post FROMauthorsa INNERJOINpostsp ON(a.id=p.author_id) GROUPBYa.id来源:http://20bits.com/文章/10-tips-for-optimizing-mysql-queries-that-dont-suck/8。谨慎使用通配符通配符非常有用。您可以在搜索数据时使用通配符来替换一个或多个字符。我并不是说它不能使用,而是应该谨慎使用,不要使用完整的通配符、前缀通配符或尾随通配符来完成同样的任务。事实上,在数百万数据中使用全字通配符进行搜索会使您的数据库崩溃。#FullwildcardSELECT*FROMTABLEWHERECOLUMNLIKE'%hello%';//hungred.com/useful-information/ways-optimize-sql-queries/9。使用UNION代替OR以下示例使用OR语句:SELECT*FROMa,bWHEREa.p=b.qora.x=b.y;UNION语句,您可以将2个或多个select语句的结果连接在一起。以下示例返回与上面相同的结果,但速度更快:SELECT*FROMa,bWHEREa.p=b.q UNION SELECT*FROMa,bWHEREa.x=b.ybcarter.com/optimsql.htm10。使用索引数据库索引类似于您在图书馆中看到的索引:它们可以让您更快地获得所需的信息,就像图书馆中的索引可以让读者更快地找到他们想要的书一样。可以在单个列或多个列上创建索引。索引是一种数据结构,它将表中一个或多个列的值按特定的顺序组织起来。以下语句在Product表的Model列上创建索引。这个索引的名字叫idxModelCREATEINDEXidxModelONProduct(Model);
