php – 选择使用长变量vs MD5性能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 选择使用长变量vs MD5性能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2922字,纯文字阅读大概需要5分钟。
内容图文
![php – 选择使用长变量vs MD5性能](/upload/InfoBanner/zyjiaocheng/777/9241b15e474444b8a66f5a8eb1bc3989.jpg)
假设我有一个包含长变量的大表(100000个条目)(URL,如100-250个字符).为了获得更好的性能,将MD5哈希作为其旁边的单独字段从表中获取单行是否有意义?
SELECT * FROM `urls` WHERE `url` = 'http://long-phrase...' LIMIT 1;
要么
SELECT * FROM `urls` WHERE `url_md5` = MD5('http://long-phrase...') LIMIT 1;
解决方法:
我猜想使用INDEX就足够了,这就是为什么,在一个下雪的星期天用平淡无奇的心情写的:
数据库将其行一个接一个地存储在文件中:
id url name descr visited
1 http://... somewhere i like it 2013-01-01
2 http://... wherever i dislike it 2013-01-02
...
您将在磁盘上大致如下所示:
[s:35:http://...s:9:somewhere...][s:45:http://...s:9:wherever...][...]
一堆字节,很多.如果您要求数据库搜索给定的术语,则数据库必须通过扫描文件来扫描“行”并应用搜索项.假设您有100万行,数据库必须扫描100万行.假设您要在行中搜索“url”字段.让我们说你更容易“搜索”,因为你缩短(或扩展,做了“http://goo.gl/P0Gwz”的md5)字符串:你仍然需要搜索100万行.
另一方面,如果您只是可以搜索ORDERED行列表,那将是really speed things up.所以,假设DB现在存储了在您插入行但未按“url”-field排序时排序的行.现在,只要您插入新行,数据库就必须重新排序磁盘上所有存储的字节.对于coz,您现在能够更快地搜索,但INSERT操作要慢得多.不要忘记:明天你想搜索“descr”-field.现在怎么办?重新排序整个文件?保留2份文件?
更好的方法是使用寄存器,一个有序列表,其中提到了在哪里找到“行”.这个想法与真实世界的图书馆一样古老:只需将书籍一个接一个地放入书架,编号并创建列表:一个按作者名称排序,一个按出版年份排序,一个按标题排序等.任何给定的人想要搜索作者选择作者注册,通过类似二元搜索的方法扫描名称(如果这个人很聪明),获取书籍的数量,上架并快速拿起书.
“register”thingy也称为“INDEX”:磁盘上引用行位置的引用的有序列表:
[s:35:http://...s:9:somewhere...][s:45:http://...s:9:wherever...][...]
^ ^ ^
| | |
| | |
i1 -------------------------------- ^ |
i2 ------------------------------------------------------------------>
i3 -^ |
i100 -------------------------------------------------------------^
例如,您现在可以检查i50以查看您的搜索字词是否匹配.如果index-function指向大于50的东西你在下一轮检查i75,如果它小于50你检查i25,依此类推.
给你数字:给定100万行,你搜索“url”-field你必须扫描:
在最坏的情况下> 100万行找到你的网址(“它不在这里”).
>平均50万行(“平均分配”).
> log2(10 ^ 6)== 20在最坏的情况下检查INDEX中的url.
> log2(10 ^ 6)-1 == 19对INDEX中的url进行平均检查.
明天你将有200万行.现在你必须通过不使用INDEX来扫描超过200万行,你必须扫描~20次最大值才能找到正确的记录或什么都没有.数百万次字符串比较与20次.您会看到使用INDEX会产生多大影响.
点击此处了解更多相关主题:
> http://dev.mysql.com/doc/refman/5.5/en/mysql-indexes.html
> http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
> http://dev.mysql.com/doc/refman/5.5/en/how-to-avoid-table-scan.html
内容总结
以上是互联网集市为您收集整理的php – 选择使用长变量vs MD5性能全部内容,希望文章能够帮你解决php – 选择使用长变量vs MD5性能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。