2016-02-29 27 views
0

我遇到以下问题:强制转换为无符号需要很长

我想从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秒的响应时间),但entrys出现不正确的顺序。 (例如,id为500的行恰好在id为3000的行之前)

所以我将id转换为无符号。像这样:

ORDER BY CAST(`id` AS UNSIGNED) DESC 

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

+0

你从'desc '得到了什么? – ethrbunny

回答

1

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

一些可能性:

介绍与整数数据类型的表中的新列,填充/维持该列的内容,与该列作为领先指数加上一个适当的索引,并更改查询被定购新的专栏。 (这将是基于函数索引的最佳MySQL近似值。)

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

000000000500 
000000030000 

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

除了这些想法...不,真的没有得到Using filesort操作来按整数值排序行。

+0

重新定义id解决了这个问题 – osanger

相关问题