1. 2016.7.12 MySQL Sort by Text/BIGINT issue¶
1.1. Situation:¶
- 用MySQL进行ORDER BY 的时候,执行语句:SELECT * FROM MYTABLE ORDERBY ID
- 数据库情况:数据量有2800万行,总大小大约2.5G
- 原来ID字段虽然都是数字,但当时觉得因为id位数较多(有的甚至达到30位),所以那个时候选择数据类型的时候就用了TEXT
1.2. Problem:¶
- 这样子导致了我执行效率非常非常低,而且会产生非常大的临时文件(我的电脑硬盘还剩下18G的空间,8G的内存也不够跑,大约到300秒时就会崩溃提示空间不够)
- 当时也上网查了很多其他的文章,可能因为这是一个比较基本的问题,或者我关键字没有输入对?总之没有查阅到相关的文章...
1.3. Solution:¶
- 解决方法是将pageid的栏位类型改成BIGINT,这样所需的时间大幅下降,且也不需要产生多少临时文件(20秒即可完成)
1.4. Anaysis:¶
- 这里推测是由于MySQL在进行比较排序的时候,若字段是TEXT类型,则需要将TEXT的字符一个一个的分别比较按照字典顺序;相比较起来INT类型进行比较只需要进行很少的几个二进制位的比较
1.5. Sum:¶
- 总结:这个故事告诉我们,能存成数字类型就存成数字…而且这样好像所需要的存储空间还比较少