比较两列时,有什么方法可以删除 mysql 中的文件排序吗?

发布于 2024-12-04 15:08:33 字数 163 浏览 1 评论 0原文

我的查询显示如下:

SELECT * FROM table 
WHERE field like '%keyword%' 
ORDER BY (vote_up-vote_down) DESC

排序正在耗尽我的 sql 资源,有什么办法可以改进吗?

My query appears as follow:

SELECT * FROM table 
WHERE field like '%keyword%' 
ORDER BY (vote_up-vote_down) DESC

The sorting is running up my sql resources, is there any way to improve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨夜星沙 2024-12-11 15:08:33

对于您的情况,,因为mysql需要计算表达式并计算vote_up-vote_down的实际结果。

因此,文件排序是不可避免的

您可以检查以下内容以获得更快的排序性能

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

如果你想提高 ORDER BY 速度,请检查是否可以让 MySQL 使用索引而不是额外的排序阶段。如果这不可能,您可以尝试以下策略:

增加 sort_buffer_size 变量的大小。

增加 read_rnd_buffer_size 变量的大小。

通过将列声明为容纳存储在其中的值所需的大小,可以减少每行使用的 RAM。例如,如果值不超过 16 个字符,则 CHAR(16) 优于 CHAR(200)。

将 tmpdir 更改为指向具有大量可用空间的专用文件系统。此外,此选项接受以循环方式使用的多个路径,因此您可以使用此功能将负载分散到多个目录中。在 Unix 上,路径应以冒号 (“:”) 分隔;在 Windows、NetWare 和 OS/2 上,路径应以分号 (“;”) 分隔。这些路径应该适用于位于不同物理磁盘上的文件系统中的目录,而不是同一磁盘上的不同分区。

NO for your case, as mysql need to evaluate the expression and calculate the actual result of vote_up-vote_down.

Thus, file-sort is inevitable

You can check the following for a faster performance on sort

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

If you want to increase ORDER BY speed, check whether you can get MySQL to use indexes rather than an extra sorting phase. If this is not possible, you can try the following strategies:

Increase the size of the sort_buffer_size variable.

Increase the size of the read_rnd_buffer_size variable.

Use less RAM per row by declaring columns only as large as they need to be to hold the values stored in them. For example, CHAR(16) is better than CHAR(200) if values never exceed 16 characters.

Change tmpdir to point to a dedicated file system with large amounts of free space. Also, this option accepts several paths that are used in round-robin fashion, so you can use this feature to spread the load across several directories. Paths should be separated by colon characters (“:”) on Unix and semicolon characters (“;”) on Windows, NetWare, and OS/2. The paths should be for directories in file systems that are located on different physical disks, not different partitions on the same disk.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文