mysql 符合索引,未建立以前用时1.72s,建立一个符合索引后,反而用时2.44s,时间反而更长,是哪的问题呢,求解。。
以下是表结构和mysql explain 后的结果:
我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数,或者刚插入的数据的ID值。
一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。
但在多线程,高并发的情况下,就不行了。
开始的时候我想的是使用mysql_insert_id(),不知道会不会在并发的时候产生影响,查询了下手册,也是才发现,是根据connection来的,不同用户间不会产生影响。所以也不用去想先把表锁起来,插入取得ID值后再解锁。直接正常插入,然后取值,即可。
int mysql_insert_id ([ resource $link_identifier ] )
mysql_insert_id()返回给定的 link_identifier中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。
如果上一查询没有产生 AUTO_INCREMENT 的值,则 mysql_insert_id()返回 0。如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。
warning: mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id()的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id()返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
此外,还可以通过QUERY两个SQL语句来执行:
首先说一下mysql的数值类型,MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
<td>
<strong>字节</strong>
</td>
<td>
<strong>最小值</strong>
</td>
<td>
<strong>最大值</strong>
</td>
<td>
</td>
<td>
<strong>(带符号的/无符号的)</strong>
</td>
<td>
<strong>(带符号的/无符号的)</strong>
</td>
<td>
1
</td>
<td>
-128
</td>
<td>
127
</td>
<td>
</td>
<td>
</td>
<td>
255
</td>
<td>
2
</td>
<td>
-32768
</td>
<td>
32767
</td>
<td>
</td>
<td>
</td>
<td>
65535
</td>
<td>
3
</td>
<td>
-8388608
</td>
<td>
8388607
</td>
<td>
</td>
<td>
</td>
<td>
16777215
</td>
<td>
4
</td>
<td>
-2147483648
</td>
<td>
2147483647
</td>
<td>
</td>
<td>
</td>
<td>
4294967295
</td>
<td>
8
</td>
<td>
-9223372036854775808
</td>
<td>
9223372036854775807
</td>
<td>
</td>
<td>
</td>
<td>
18446744073709551615
</td>
Mysql类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。
所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。
所以int(10)与int(11)后的括号中的字符表示显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,int类型的字段能存储的数据上限还是2147483647(有符号型)和4294967295(无符号型)。
google了下,没有找到如何通过apache日志计算出PV数和UV数,在知乎上提问了个,等待高人解答吧。
—–
等了一下午,知乎上也木有人能给出合理的算法,chinaunix上也木有,stackoverflow.com上也木有,自己找时间看一下awstats吧,看看能不能找到答案。
—-
来公布答案了~~
查询了awstats的文档说明,http://awstats.sourceforge.net/docs/awstats_glossary.html 这里
Glossary
Unique Visitor:
A unique visitor is a person or computer (host) that has made at least 1 hit on 1 page of your web site during the current period shown by the report. If this user makes several visits during this period, it is counted only once. Visitors are tracked by IP address, so if multiple users are accessing your site from the same IP (such as a home or office network), they will be counted as a single unique visitor.
The period shown by AWStats reports is by default the current month.
However if you use AWStats as a CGI you can click on the “year” link to have a report for all the year. In such a report, period is a full year, so Unique Visitors are number of hosts that have made at least 1 hit on 1 page of your web site during the year.
awstats中, unique visitor 是根据IP来计算的,所以awstats中统计的UV值,即是IP值。
webtrends中, 也有对UV的统计,不过webtrends也是有JS统计代码的,所以,它的统计原理跟大部分统计代码都一样,通过JS获取客户端的cookie来计算UV值。
附一段webtrends的统计代码,为了避嫌,把敏感信息改掉了,大家看看就行了:
查看并询问了一些关于Google Analytics计算UV数的算法,记录如下(感谢 yeshu http://www.wainsight.com):
Google Analytics对于独立访客(UV)的计算,是基于访客浏览器中cookie来确定的,当访客第一次(或cookie丢失后)访问添加GATC的代码时,便会创建一个唯一的cookie(即一个UV),cookie中utma变量记录了访客ID、访问次数、访问时间等信息,UV数以此累加。当访客丢失cookie或更换浏览器重新访问网站,都将会被认为新访客,而创建一个cookie,记录为一个新的UV。
.
以下内容也是一些关于apache日志分析的东东,记录下来。
1.什么是UV?
UV是unique visitor的简写,是指独立访客,是以实际访问的电脑计数。
2.什么是IP?
IP是国际互联网协议(Internet Protocol)的简称,是通过网络间信息地址定位具体计算机的方式之一。
3.UV和IP的概念有什么区别?
对于IP来说,它在同一级别的网络(例如某个局域网、社区网、教学楼网或者INTERNET)范围内是唯一的,同一局域网内的所有电脑都只有一个共同ip。
举例来说,我在一个局域网里,对外的IP是219.129.170.111,那么跟我同一局域网里的所有电脑都是这个IP,也就是说假如整个局域网的电脑都访问您的网站的话,在24小时内也只计算一个IP,所以相对UV来说不是很精确。
而UV跟IP稍有不同,UV是访问你的网站的每一台电脑客户端。现在很多朋友用的网络都是局域网,引入了UV后,就能更精确的统计。
总结:
UV的统计数比IP更为准确,能够准确的计数每一台访问电脑,而IP把同一局域内的所有电脑视为一个。
(PS:UV计数会涉及COOKIE。)
一、什么是web server log 和 page tagging
**web server log:**使用软件将原始数据解析为有用的数据。主要的工具有awstats、webtrends(收费)。
以下为具体的服务器日志:
web server log主要可统计到的数据为:
今天玩NBA2K12时,所有的各节开始结束后出现的页面都挂着清一色的绿色,还有一个戴着绿色帽子的小人拿着一个篮球。。开始还以为是凯尔特人的啥节呢。。后来出现了文字,发现是个 Happy St. Patrick’s Day .可惜不知道咋截图,用键盘的printscreen键获取的截图是全黑的,这个截图对3D的全屏游戏无奈啊,,。怪不得也觉得这几天看的NBA里觉得有些队的颜色有些不对劲。
查了一些相关信息,做个纪录吧。
St. Patrick Day
原本只是爱尔兰的传统节日的St. Patrick Day ,却在世界各地广为庆祝;这小小岛国迸发出的能量可见一斑。 St. Patrick Day 对于美国人一样意义深远,身在美国的华人也许心里难免有些羡慕,什么时候我们的春节也能在异国他乡受到如此之高的礼遇啊。回顾爱尔兰人的移民史,追溯 St. Patrick Day 的来龙去脉,可以看到,爱尔兰人与华人一样,走过了一条十分艰辛移民路。
爱尔兰流传着一首民谣:”The Green Fields of America”:
“So pack up your sea-stores, consider no longer,
Ten dollars a week is not very bad pay,
With no taxes or tithes to devour up your wages,
When you’re on the green fields of America.”