Когда индекс (составной или нет) используется для «сортировки», MySQL считывает данные по порядку и не выполняет сортировку вообще. Это невозможно с несколькими индексами.
Возможно упорядоченное чтение по 1-му индексу, а затем сортировка файлов, но вряд ли это будет быстрее, поэтому MySQL этого не делает.
Если вам действительно нужно это сделать, вы можете использовать такой подзапрос, как этот:
SELECT ...
FROM (
SELECT primary_key
FROM table1
ORDER BY field1
LIMIT 15
) tmp
JOIN table1 t ON t.primary_key = tmp.primary_key
ORDER BY field1, field2
Это может быть полезно, когда у вас есть LIMIT
и по какой-то причине вы не можете добавить составной индекс .
У меня была та же проблема.. если действия не являются проблемой, можно использовать XSLT для переименования "дочерних" таблиц, которые имеют то же имя, (т.е. получающееся имя является конкатенацией имени таблицы и его родителя):
...
<xsl:template match="*">
<xsl:param name="parentElm">
<xsl:value-of select="name(..)" />
</xsl:param>
<xsl:choose>
<xsl:when test="local-name() = 'Contact'">
<xsl:element name="{concat('Contact',$parentElm)}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:when> <xsl:otherwise>
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*" />
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:otherwise>
</xsl:choose> </xsl:template> ...
Я предложил бы простое переименование объектов схемы плюс использование группировки (показанный ниже), или xsd включает (при необходимости в этом составном типе для других схем). Это должно решить к проблеме, если у Вас есть не твердый requirment на именах.
На основе опыта я не думаю, может инструменты работать с повторным именованием в Вашем примере.
Что-то вроде этого может добиться цели:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XSDobject" targetNamespace="http://tempuri.org/XSDobject.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XSDobject.xsd" xmlns:mstns="http://tempuri.org/XSDobject.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="Contact">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="phone" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderContact">
<xs:complexType>
<xs:sequence>
<xs:group ref="Contact"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="buyer">
<xs:complexType>
<xs:sequence>
<xs:element name="BuyerContact">
<xs:complexType>
<xs:sequence>
<xs:group ref="Contact"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Возможно, вы можете использовать xsd: import / xsd: include, чтобы разделить xsd на несколько файлов, а затем использовать xsd.exe для компиляции каждого из них. Я думаю, вы можете указать пространство имен для генерации кода при работе с xsd.exe.
Я работал с генерацией классов из xsd: sa пару лет назад, и по какой-то причине я решил использовать xsdobjgen.exe вместо xsd .exe.
Удачи!