每次插入新的原始文件后,如何按字母顺序排序?

时间:2017-02-05 18:46:21

标签: mysql

我正在尝试:

"CREATE DEFINER=`root`@`localhost` TRIGGER `alphabetic sorting by surname` AFTER INSERT ON `contacts` FOR EACH ROW ALTER TABLE contatti ORDER BY surname ASC"

但我明白了     #1422 - 存储函数或触发器中不允许显式或隐式提交。

我很长时间没有触摸数据库,我需要做什么?

它应该是一个应用程序在多个智能手机上打开的电话号码列表,所以每次在手机上对联系人列表进行排序都没有意义,对我而言看起来更多高效地保持在服务器端排序。

谢谢任何人。

1 个答案:

答案 0 :(得分:0)

表没有按定义排序,查询必须有ORDER BY子句来保证结果行的特定顺序。

但是,您可以创建覆盖索引。它首先限制列,即WHERE子句中使用的列,然后是ORDER BY中的列,然后是所有其他选定的列。然后,DBMS将能够从索引中选择所有数据,而无需访问实际表,数据将按所需顺序排列。

当然,查询仍将包含相应的ORDER BY子句,但DBMS(希望)会注意到它不再需要执行排序操作以获得所需顺序的数据。

示例1:

create index idx_contacts_byarea on contacts (area, surname, firstname, phone);

select firstname, surname, phone from contacts where area = 51 order by surname;

示例2:

create index idx_contacts_all on contacts (surname, firstname, phone);

select firstname, surname, phone from contacts where order by surname;