假如您真的必要随机表现你的功效,有许多更好的途径去实现。诚然这必要写更多的代码,可是能停止机能瓶颈的呈现。题目在于,MySQL也许会为表中每一个独立的行执行BY RAND()呼吁(这会耗损处理赏罚器的处理赏罚手段),然后给你仅仅返回一行。
- // what NOT to do:
-
- $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1");
-
- // much better:
-
- $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");
七 、只管停止SELECT *呼吁
从表中读取越多的数据,查询会变得更慢。他增进了磁盘必要操纵的时刻,照旧在数据库处事器与WEB处事器是独立分隔的环境下。你将会经验很是漫长的收集耽误,仅仅是由于数据不须要的在处事器之间传输。
- 始终指 定你必要的列,这是一个很是精采的风俗。
-
- // not preferred
-
- $r = mysql_query("SELECT * FROM user WHERE user_id = 1");
-
- $d = mysql_fetch_assoc($r);
-
- echo "Welcome {$d['username']}";
-
- // better:
-
- $r = mysql_query("SELECT username FROM user WHERE user_id = 1");
-
- $d = mysql_fetch_assoc($r);
-
- echo "Welcome {$d['username']}";
-
- // the differences are more significant with bigger result sets
八、 从PROCEDURE ANALYSE()中得到提议
ROCEDURE ANALYSE()可让MySQL的柱布局说明和表中的现实数据来给你一些提议。假如你的表中已经存在现实数据了,能为你的重大决定处事。

九、 筹备好的语句
筹备好的语句,可以从机能优化和安详两方面临各人有所辅佐。
筹备好的语句在过滤已经绑定的变量默认环境下,能给应用措施以有用的掩护,防备SQL注入进攻。虽然你也可以手动过滤,不外因为大大都措施员忘掉的性格,很难到达结果。
- // create a prepared statement
-
- if ($stmt = $mysqli->prepare("SELECT username FROM user WHERE state=?")) {
-
- // bind parameters
-
- $stmt->bind_param("s", $state);
-
- // execute
-
- $stmt->execute();
-
- // bind result variables
-
- $stmt->bind_result($username);
-
- // fetch value
-
- $stmt->fetch();
-
- printf("%s is from %s ", $username, $state);
-
- $stmt->close();
-
- }
十、 将IP地点存储为无标记整型
很多措施员在建设一个VARCHAR(15)时并没故意识到他们可以将IP地点以整数情势来存储。当你有一个INT范例时,你只占用4个字节的空间,这是一个牢靠巨细的规模。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|