Redis容量及使用规划

在使用Redis过程中,我们发现了不少Redis不同于Memcached,也不同于MySQL的特征。
(本文主要讨论Redis未启用VM支持情况)

1. Schema
MySQL: 需事先设计
Memcached: 无需设计
Redis: 小型系统可以不用,但是如果要合理的规划及使用Redis,需要事先进行类似如下一些规划

数据项: value保存的内容是什么,如用户资料
Redis数据类型: 如String, List
数据大小: 如100字节
记录数: 如100万条(决定是否需要拆分)
⋯⋯
上面的规划就是一种schema,为什么Redis在大型项目需要事先设计schema?因为Redis服务器有容量限制,数据容量不能超出物理内存大小,同时考虑到业务数据的可扩充性,记录数会持续增多、单条记录的内容也都会增长,因此需要提前规划好容量,数据架构师就是通过schema来判断当前业务的Redis是否需要“分库分表”以满足可扩展需求。 继续阅读“Redis容量及使用规划”

#1146 – Table 'performance_schema.session_variables' doesn't exist

一下子从Mysql5.1 手动升级到5.7.9,然后用Navicat进行查询时,却提示错误:
Table ‘performance_schema.session_variables’ doesn’t exist
因为我是使用压缩包直接解压替换的,想想可能是升级中出的问题,于是度娘一下,发现很多类似的情况,但解决方法都是都回到旧版本,然后再用mysqldump导出,再到新版本里解压,费时也不方便。

我忽然想到以前出现个类似的情况,Mysql的Bin目录的下工具:mysql_upgrade.exe

于是就抱着试试的心态在命令行下执行:

mysql_upgrade -uroot -p

执行一切顺利:
……
Repairing tables
mysql.proxies_priv                                 OK
Upgrade process completed successfully.
Checking if update is needed.

然后重启mysql服务,再次进入,果然一切都正常了,哈!

MySQL中各数据类型的取值范围

MySQL中各数据类型的取值范围

TINYINT
-128 – 127
TINYINT UNSIGNED
0 – 255
SMALLINT
-32768 – 32767
SMALLINT UNSIGNED
0 – 65535
MEDIUMINT
-8388608 – 8388607
MEDIUMINT UNSIGNED
0 – 16777215
INT 或 INTEGER
-2147483648 – 2147483647
INT UNSIGNED 或 INTEGER UNSIGNED
0 – 4294967295
BIGINT
-9223372036854775808 – 9223372036854775807
BIGINT UNSIGNED
0 – 18446744073709551615 继续阅读“MySQL中各数据类型的取值范围”

[转载]关于mysql处理百万级以上的数据时如何提高其查询速度的方法

以下是网上流传比较广泛的30种SQL查询语句优化方法:

1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
     select id from t where num is null
     可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
     select id from t where num=0
继续阅读“[转载]关于mysql处理百万级以上的数据时如何提高其查询速度的方法”

日常所有

禁用电脑自动休眠:
powercfg -h off

安装MYSQL服务
mysqld –install mysql5 –defaults-file= %basedir%\my.ini

安装APACHE服务
httpd.exe -k install -n apache2.2

mysqldump -hIP地址 -u帐号ID -p 需要备份的数据库 > 111.sql
Enter password: ****************

mysql -hIP地址 -u帐号ID -p 需要还原的数据库 < 111.sql
Enter password: ****************

mysqli::multi_query()的诸多注意事项

在处理网页订单的时候,想到最多的就是 mysqli::multi_query()这个了,可以同时提交多条语句:
1、在订单库里生成订单,并返回一个订单号
2、将购物车里产品清单转移到订单清单列表中
    A、Copy到订单列表表中
    B、清空购物车
这就是提交订单过程中,通常所需要处理的步骤了, mysqli::multi_query()的用武之地,然而在使用 mysqli::multi_query()时,需要注意以下几点:
继续阅读“mysqli::multi_query()的诸多注意事项”

mysql利用GROUP BY结果联合查询

SQL语句如下:


SELECT A . * , B.num
  FROM
    表一 A,
    (SELECT product_id, count( product_id ) num
      FROM 表二
      GROUP BY product_id
    )B
  WHERE A.product_id = B.product_id
    AND A.status =1
  ORDER BY B.num DESC

其实际上就是把GROUP BY 的结果当作一个新表来使用而已,不知道查询效率如何,或者有没有更好的办法来实现?
另一种实现方法:


SELECT A. * , B.num
  FROM 表一 A
    INNER JOIN (
      SELECT product_id, count( product_id ) num
      FROM 表二
      GROUP BY product_id
    )B
    ON A.product_id = B.product_id
      AND A.status =1
  ORDER BY B.num DESC

继续阅读“mysql利用GROUP BY结果联合查询”