Mysql-以有效的方式对域进行排序并忽略任何www

Mysql-以有效的方式对域进行排序并忽略任何www,mysql,sql-order-by,Mysql,Sql Order By,我有一个域名表,我想按“字母顺序”排序,但我不希望所有的www.domain都排在最后 现在(根据域的基本顺序),它的排序如下,例如: amazon.com google.com reddit.com stackoverflow.com www.etsy.com www.facebook.com www.pintrest.com www.yahoo.com zebras.com ALTER TABLE mydomain ADD seq_domain VARCHAR(80) COMMENT 'v

我有一个域名表,我想按“字母顺序”排序,但我不希望所有的www.domain都排在最后

现在(根据域的基本顺序),它的排序如下,例如:

amazon.com
google.com
reddit.com
stackoverflow.com
www.etsy.com
www.facebook.com
www.pintrest.com
www.yahoo.com
zebras.com
ALTER TABLE mydomain ADD seq_domain VARCHAR(80) COMMENT 'value used order rows';
UPDATE mydomain SET seq_domain = IF(domain LIKE 'www.%',SUBSTR(domain,5),domain);
CREATE INDEX mydomain_IX2 ON mydomain (seq_domain, domain);
我希望它的排序如下:

amazon.com
www.etsy.com
www.facebook.com
google.com
www.pintrest.com
reddit.com
stackoverflow.com
www.yahoo.com
zebras.com
最有效的方法是什么?可以想象,这可能是一张很大的桌子:)

试试这个:


按替换从T order中选择*(域“www.”,“”)

就查询而言,最有效的查询是向表中添加一列,并在该列中存储要排序的值,然后添加一个以该列为前导列的索引

例如:

amazon.com
google.com
reddit.com
stackoverflow.com
www.etsy.com
www.facebook.com
www.pintrest.com
www.yahoo.com
zebras.com
ALTER TABLE mydomain ADD seq_domain VARCHAR(80) COMMENT 'value used order rows';
UPDATE mydomain SET seq_domain = IF(domain LIKE 'www.%',SUBSTR(domain,5),domain);
CREATE INDEX mydomain_IX2 ON mydomain (seq_domain, domain);
做那些工作并不是完全有效率的。。。但它有助于实现非常高效的查询,例如

SELECT t.domain
  FROM mydomain t
 ORDER BY t.seq_domain

否则,您将需要对一个表达式进行排序,该表达式必须对每一行进行求值,MySQL将必须执行“使用文件排序”操作,以按特定顺序获取行

ORDER BY IF(domain LIKE 'www.%',SUBSTR(domain,5),domain)