09

关于随机抽取order By Rand()的效率问题和改进写法!

最近由于需要大概研究了一下MYSQL的随机抽取实现方法。

举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是 SELECT * FROM tablename ORDER BY RAND() LIMIT 1

但是,后来我查了一下MYSQL的官方手册,里面针对RAND()有如下提示:

You can’t use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. In MySQL Version 3.23, you can, however, do: SELECT * FROM table_name ORDER BY RAND()

大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。

继续阅读全文

09

MySQL字符串比较函数学习(二) — 比较函数

字符串比较函数函数在手册:这里。比较函数主要有三类:一个是用like子句;二是使用正则表达式的like子句;三是STRCMP函数了。前两者感觉更侧重搜索,第三个有大小的比较在里面。

字符串比较中有以下四个规则:

1:MySQL 会自动将数字转化为字符串,反之亦然。
2:若想要将数字明确地转化为字符串,可使用 CAST()或 CONCAT()函数。
3:若已经对一个字符串函数给定一个二进制字符串作为参数, 则所得到的结果字符串也是一个二进制字符串。
4:一般而言, 若字符串比较中任意一个表达式是区分大小写的,则执行比较时也区分大小写。

下面根据以上说的三类进行学习:

继续阅读全文

09

MySQL字符串比较函数学习(一)

通览了一下手册,发现MySQL的字符串函数和PHP的函数在功能还是有很多地方相似的,很多都能在php中找到对应的函数。所以在这里,要向大家推荐一个文章:PHP 中执行排序与 MySQL 中排序。作者:明灵(dragon) , Fenng 。地址:http://www.dbanotes.net/arch/php_mysql_sort.html

好,回到本文。先说两个特别的地方:

1:函数中,假如结果的长度大于 max_allowed_packet 系统变量的最大值时,字符串值函数的返回值为NULL。请参见7.5.2节,“调节服务器参数”(http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#server-parameters)。

2:和PHP等编程语言不同,对于在字符串位置操作的函数,第一个位置的编号为 1。

继续阅读全文

09

MySQL 的数据类型和建库策略

无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。

一、数字类型

二、日期时间类型

三、字符 (串) 类型

四、枚举和集合类型

继续阅读全文

30

MYSQL索引和优化详细说明教程

在大型数据库中,索引是提高速度的一个关键因素。不管表的结构是多么简单,一次500000行的表扫描操作无论如何不会快。如果你的网站上也有这种大规模的表,那么你确实应该花些时间去分析可以采用哪些索引,并考虑是否可以改写查询以优化应用。要了解更多信息,请参见MySQL manual。另外注意,本文假定你所使用的MySQL是3.23版,部分查询不能在3.22版MySQL上执行。

继续阅读全文