- 浏览: 109907 次
- 性别:
- 来自: 广州
最新评论
文章列表
出现这样的问题: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 采用多线程来处理并发的连接,通过 mysqlreport 中的 Threads 部分,我们可以看到线程创建的统计结果:
每秒创建43.6个线程,虽然创建线程的开销不值一提,但是当系统比较繁忙的时候,我们当然不希望再给它添麻烦。
一个比较好的办法是在应用中尽量使用持久连接,这将在一定程度上减少线程的重复创建。另一方面,从上面的 Cache = 0 可以看出,这些线程并没有被复用,我们可以在 my.cnf 中设置一下选项:
thread_cache_size = 100
这使得 MySQL 可以缓存 100 个线程。随后我们获得新的 mysqlreport ...
我们会在一些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该怎么写
- 博客分类:
- 数据库
在开发过程中会遇到这样一种场景:用户在这个表中有两条一样记录的所有用户给抓取出来,举个例子,你想把用户表有两个相同手机号码的记录给抓出来,该怎么来写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,即 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 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" ...