施放到无符号的需要很长时间

时间:2016-02-29 14:24:07

标签: mysql

我遇到以下问题:

我想查询3个大型SQL表中的一些数据。

eintraege~13000行// rubrik2eintrag~9500行// rubriken~425行

此查询

SELECT eintraege.id AS id, eintraege.email, eintraege.eintrags_name, eintraege.telefon, 
    eintraege.typ, rubrik2eintrag.rubrik AS rubrik, eintraege.status,
    IFNULL( GROUP_CONCAT( rubriken.bezeichnung ), \'- Keine Rubrik zugeordnet\' ) AS rubrikname
        FROM eintraege
        LEFT OUTER JOIN rubrik2eintrag ON rubrik2eintrag.eintrag = eintraege.id
        LEFT OUTER JOIN rubriken ON rubrik = rubriken.rubrik_id
        GROUP BY id
        ORDER BY `id` DESC
        LIMIT 0, 50

对我来说很好(约2秒响应时间),但是出现的顺序不正确。 (例如,id为500的行就在ID为3000的行之前)

所以我将id转换为unsigned。像这样:

ORDER BY  CAST(`id` AS UNSIGNED) DESC

但现在查询需要将近40秒。 是否有更好/更快的方法来达到正确的有序输出?

1 个答案:

答案 0 :(得分:1)

显然,id未定义为整数(或数字)数据类型。这可以解释排序,它按字符串值排序。

一些可能性:

使用整数数据类型在表中引入新列,填充/维护该列的内容,使用该列添加适当的索引作为前导索引,并将查询更改为按新列排序。 (这将是基于函数的索引的最佳MySQL近似。)

或者,将字符串值存储为前导零,因此它们的长度相同。

000000000500
000000030000

或者,将id列重新定义为整数类型。

除了那些想法之外......没有,实际上没有绕过Using filesort操作来按整数值排序行。