`
王之子
  • 浏览: 109907 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
出现这样的问题:session_start(): Cannot start session when headers already sent  可能是因为你文件的编码问题:用了 UTF-8-BOM 编码  
自定义实现了一个 session 类,发现出现  session_start(): Failed to decode session object. Session has been destroyed 这个问题,原来是数据表的存储引擎 Memory 改为 Innodb ,数据表字段类型由 char 改为 text 就可以了  

MySQL 线程池

MySQL 采用多线程来处理并发的连接,通过 mysqlreport 中的 Threads 部分,我们可以看到线程创建的统计结果:   每秒创建43.6个线程,虽然创建线程的开销不值一提,但是当系统比较繁忙的时候,我们当然不希望再给它添麻烦。 一个比较好的办法是在应用中尽量使用持久连接,这将在一定程度上减少线程的重复创建。另一方面,从上面的 Cache = 0 可以看出,这些线程并没有被复用,我们可以在 my.cnf 中设置一下选项:   thread_cache_size = 100   这使得 MySQL 可以缓存 100 个线程。随后我们获得新的 mysqlreport ...

MySQL 临时表

我们会在一些SQL查询中分析出现 Using temporary 的状态,这意味着查询过程中需要创建临时表来储存中间数据,我们需要通过合理的索引来避免它。另一方面,当临时表在所难免时,我们也要尽量减少临时表本身的开销,通过 mysqlreport 报告中的 Created Temp 部分,我们可以看到: MySQL 可以将临时表创建在磁盘(Disk table),内存(Table)以及临时文件(File)中,显然,在磁盘上创建临时表的开销最大,所以我们希望 MySQL 尽量不要在磁盘上创建临时表。   如果你在 show processlist 中看到某些查询的状态为 Copying ...

使用查询缓存

查询缓存的目的很简单,将 select 查询的结果缓存在内存中,以供下次直接获取。在默认情况下,MySQL 是没有开启查询缓存的,我们可以进行以下配置:   query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576   这样一来,MySQL 将拥有 256 MB的内存空间来查询缓存结果、对于以 select 为主的查询应用,查询缓存理所当然地起到性能提升的作用,无论是 Innodb 还是 MyISAM,查询缓存都可以很好地工作,因为它在逻辑中位于比较高的层次。   -- -- 表的结构 ...
MySQL 中的 Innodb 除了支持行锁定外,还支持事务,这往往也是使用 Innodb 的另一个原因。在一些特定的应用中,程序依赖于数据库提供的事务操作(如 rollback 或者 commit),这给应用程序带来了不少方便。   当然,如果你并没有在应用程序中使用事务操作的打算,而只是看中了 Innodb 的其它特性,比如行锁定、外键以及易于修复等,你仍然可以使用它。虽然人们一提到 Innodb 就会联想到事务,但是大多数的站点使用 Innodb 都不是冲着事务,而是为了理想中的性能,事实上大多数的站点都不需要事务级别的保障。   也许行锁定正符合你的站点应用类型,而且由于行锁 ...
在开发过程中会遇到这样一种场景:用户在这个表中有两条一样记录的所有用户给抓取出来,举个例子,你想把用户表有两个相同手机号码的记录给抓出来,该怎么来写SQL呢?   select mobile from users group by mobile having count(*)>1   这样你就能获取到相同的手机号码的记录了。想再一步获取详情信息之需这样子:   select * from users where mobile in (select mobile from users group by mobile having count(*)>1)   我们再来 ...

锁定与等待

锁机制是影响查询性能的另一个重要因素。当有多个用户并发访问数据库中某一资源的时候,为了保证并发访问的一致性,数据库必须通过锁机制来协调这些访问。 我们可以认为查询的时间开销主要包括两部分,即查询本身的计算时间和查询开始前的等待时间,所以说索引影响的是前者,而锁机制影响的是后者。   减少表锁定等待 MySQL 为 MyISAM 类型表提供了表级别的锁定。MyISAM 的表锁定可以允许多个线程同时读取数据,比如 select 查询,它们之间是不需要锁等待的。但是对于更新操作(如 update 操作),它会排斥对当前表的所有其它查询,包括 select 查询。除此之外,更新操作有着默认的 ...

压力测试软件 ab

ab,即 Apache Benchmark,只要我们安装了 Apache,就能够在 Apache 的安装目录中找到它,Apache 已经为我们附带了一个压力测试工具。   开始测试 D:\wamp\bin\apache\apache2.4.23\bin>ab -n1000 -c10 http://test.damiyin.com/phpinfo.php 其中-n 表示请求数,-c 表示并发数 -n1000    表示总请求数为1000 -c10        表示并发用户数为10 http://test.damiyin.com/phpinfo.php    表示这些请求的 ...

索引的代价

在使用索引的时候,我们同样需要考虑代价,但是不用为代价感到恐惧,我们只需要思考是否值得。 首先,索引会占据更多的磁盘空间,很多时候索引甚至比数据本身还要大,比如将拥有100万行记录的表转为MyISAM类型后,可以看到索引文件(MYI 文件)的大小几乎是数据文件(MYD 文件)的两倍。   我们来创建这样一个数据表:      CREATE TABLE `key_t` ( `id` int(11) NOT NULL, `key1` int(11) NOT NULL DEFAULT '0', `key2` int(11) NOT NULL DEFAULT ...
大多数书的目录中会列出“章”和“节”,这便是组合索引。 在实际的数据库访问中,大多数的查询都包含组合条件,比如:   ... where a = 1 and b = 2 ... where a = 1 order by b ... where a = 1 group by b   这个时候,即使字段 a 和字段 b 已经分别建立了索引,它们仍然不能同时发挥作用,因为一次查询对于一个数据表只能使用一个索引,它们是无法进行效用叠加的。这样一来,便会存在一定程度的局部行扫描(Range Scan),这在有些特定的场景中将严重影响查询性能,比如上述第一条查询,数据库会先利用字段 ...
    在做Web开发的时候,经常会遇到这样的情形。那就是多条件查询。对很多PHP初学者都感到很棘手。     举个简单例子来说,我们有个user的用户表。用户可以在界面上输入姓名、性别、年龄来搜索用户信息。 id name sex age 1 小林 女 18 2 小亮 男 17     我们在后台该怎么处理呢?<?php$name = $_POST['name'];$sex = $_POST['sex'];$age = $_POST['age'];$sql = $name ? "SET @name = '$name'":&quo ...

Git 常用命令

创建新的 Git 仓库: git init   拷贝一个 Git 仓库到本地(类似 svn checkout): git clone [url]   第一步需要配置用户名和邮箱地址。 $ git config --global user.name 'runoob' $ git config --global user.email test@runoob.com   列出分支基本命令: git branch   创建一个分支: git branch testing   切换分支: git checkout (branch)    分支合并(合并到当前分支): ...
一、前端 用ECSHOP后台源生JS来开发管理后台是非常快速的,我们可以参考源生的 ECShop\admin\templates\users_list.htm 文件,后台管理列表主要用到这两个JS文件。   ECShop\js\utils.js ECShop\admin\js\listtable.js   所以需要在模板加入这段代码 {insert_scripts files="../js/utils.js,listtable.js"} 如图,引入JS文件后,就能对表格里的数据进行排序    还能直接对表格的数据进行编辑   分页功能则更简单, ...
 PHP实现在线端口检测源代码   <?php $youip = $_SERVER["REMOTE_ADDR"]; // 获取本机IP地址 $remoteip = isset($_POST['remoteip']) ? $_POST['remoteip']:''; // 获取表单提交的IP地址 ?> <html> <head> <title>端口在线检测</title> <meta http-equiv="Content-Type" ...
Global site tag (gtag.js) - Google Analytics