外贸网站建设评价,网站的营销方案,以公开的文化,小鱼儿外贸网站5. 在Join表的时候使用相当类型的例#xff0c;并将其索引 如果你的应用程序有很多 JOIN 查询#xff0c;你应该确认两个表中Join的字段是被建过索引的。这样#xff0c;MySQL内部会启动为你优化Join的SQL语句的机制。 而且#xff0c;这些被用来Join的字段#xff0c;应该… 5. 在Join表的时候使用相当类型的例并将其索引 如果你的应用程序有很多 JOIN 查询你应该确认两个表中Join的字段是被建过索引的。这样MySQL内部会启动为你优化Join的SQL语句的机制。 而且这些被用来Join的字段应该是相同的类型的。例如如果你要把 DECIMAL 字段和一个 INT 字段Join在一起MySQL就无法使用它们的索引。对于那些STRING类型还需要有相同的字符集才行。两个表的字符集有可能不一样 1 2 3 4 5 6 // 在state中查找company $r mysql_query(SELECT company_name FROM users LEFT JOIN companies ON (users.state companies.state) WHERE users.id $user_id); // 两个 state 字段应该是被建过索引的而且应该是相当的类型相同的字符集。 6. 千万不要 ORDER BY RAND() 想打乱返回的数据行随机挑一个数据真不知道谁发明了这种用法但很多新手很喜欢这样用。但你确不了解这样做有多么可怕的性能问题。 如果你真的想把返回的数据行打乱了你有N种方法可以达到这个目的。这样使用只让你的数据库的性能呈指数级的下降。这里的问题是MySQL会不得不去执行RAND()函数很耗CPU时间而且这是为了每一行记录去记行然后再对其排序。就算是你用了Limit 1也无济于事因为要排序 下面的示例是随机挑一条记录 1 2 3 4 5 6 7 8 9 // 千万不要这样做 $r mysql_query(SELECT username FROM user ORDER BY RAND() LIMIT 1); // 这要会更好 $r mysql_query(SELECT count(*) FROM user); $d mysql_fetch_row($r); $rand mt_rand(0,$d[0] - 1); $r mysql_query(SELECT username FROM user LIMIT $rand, 1); 7. 避免 SELECT * 从数据库里读出越多的数据那么查询就会变得越慢。并且如果你的数据库服务器和WEB服务器是两台独立的服务器的话这还会增加网络传输的负载。 所以你应该养成一个需要什么就取什么的好的习惯。 1 2 3 4 5 6 7 8 9 // 不推荐 $r mysql_query(SELECT * FROM user WHERE user_id 1); $d mysql_fetch_assoc($r); echo Welcome {$d[username]}; // 推荐 $r mysql_query(SELECT username FROM user WHERE user_id 1); $d mysql_fetch_assoc($r); echo Welcome {$d[username]}; 8. 永远为每张表设置一个ID 我们应该为数据库里的每张表都设置一个ID做为其主键而且最好的是一个INT型的推荐使用UNSIGNED并设置上自动增加的AUTO_INCREMENT标志。 就算是你 users 表有一个主键叫 “email”的字段你也别让它成为主键。使用 VARCHAR 类型来当主键会使用得性能下降。另外在你的程序中你应该使用表的ID来构造你的数据结构。 而且在MySQL数据引擎下还有一些操作需要使用主键在这些情况下主键的性能和设置变得非常重要比如集群分区…… 在这里只有一个情况是例外那就是“关联表”的“外键”也就是说这个表的主键通过若干个别的表的主键构成。我们把这个情况叫做“外键”。比如有一个“学生表”有学生的ID有一个“课程表”有课程ID那么“成绩表”就是“关联表”了其关联了学生表和课程表在成绩表中学生ID和课程ID叫“外键”其共同组成主键。 9. 使用 ENUM 而不是 VARCHAR ENUM 类型是非常快和紧凑的。在实际上其保存的是 TINYINT但其外表上显示为字符串。这样一来用这个字段来做一些选项列表变得相当的完美。 如果你有一个字段比如“性别”“国家”“民族”“状态”或“部门”你知道这些字段的取值是有限而且固定的那么你应该使用 ENUM 而不是 VARCHAR。 MySQL也有一个“建议”见第十条告诉你怎么去重新组织你的表结构。当你有一个 VARCHAR 字段时这个建议会告诉你把其改成 ENUM 类型。使用 PROCEDURE ANALYSE() 你可以得到相关的建议。 10. 从 PROCEDURE ANALYSE() 取得建议 PROCEDURE ANALYSE() 会让 MySQL 帮你去分析你的字段和其实际的数据并会给你一些有用的建议。只有表中有实际的数据这些建议才会变得有用因为要做一些大的决定是需要有数据作为基础的。 例如如果你创建了一个 INT 字段作为你的主键然而并没有太多的数据那么PROCEDURE ANALYSE()会建议你把这个字段的类型改成 MEDIUMINT 。或是你使用了一个 VARCHAR 字段因为数据不多你可能会得到一个让你把它改成 ENUM 的建议。这些建议都是可能因为数据不够多所以决策做得就不够准。 在phpmyadmin里你可以在查看表时点击 “Propose table structure” 来查看这些建议 一定要注意这些只是建议只有当你的表里的数据越来越多时这些建议才会变得准确。一定要记住你才是最终做决定的人。 11. 尽可能的使用 NOT NULL 除非你有一个很特别的原因去使用 NULL 值你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议请往下看。 首先问问你自己“Empty”和“NULL”有多大的区别如果是INT那就是0和NULL如果你觉得它们之间没有什么区别那么你就不要使用NULL。你知道吗在 Oracle 里NULL 和 Empty 的字符串是一样的) 不要以为 NULL 不需要空间其需要额外的空间并且在你进行比较的时候你的程序会更复杂。 当然这里并不是说你就不能使用NULL了现实情况是很复杂的依然会有些情况下你需要使用NULL值。 下面摘自MySQL自己的文档 “NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.” 转载于:https://www.cnblogs.com/mafeng/p/6824677.html