2016-10-10 2 views
1

Wenn ich die Objekte zu erhalten,Wie kann ich die Reihenfolge der Felder im Filter priorisieren

objs = Page.objects.get(slug="some-slug.html", web_id=1) 

die generierte SQL-Abfrage

select * from cms_page WHERE ("cms_page"."web_id" = '1' AND "cms_page"."slug" = '''some-slug''') 

ich die SQL

ändern möchte, ist
select * from cms_page WHERE ("cms_page"."slug" = '''some-slug''' and "cms_page"."web_id" = '1') 

Erstes Slug-Feld, da das Slug-Feld ein Index ist (Exist-Index mit diesem Feld)

class Page(models.Model): 
    title = models.CharField(max_length=128) 
    body = models.TextField(blank=True) 
    slug = models.CharField(max_length=200, db_index=True) 
    web = models.ForeignKey(Web, editable=False) 
    def __unicode__(self): 
     return self.title 
    def save(self, *args, **kwargs): 
     if not self.slug: 
      self.slug = "{0}{1}".format(slugify(self.title),".html") 
     super(Page,self).save(*args,**kwargs) 
    class Meta: 
     unique_together = ("web", "slug") 
     index_together = ["web", "slug"] 
+0

Es spielt keine Rolle für den Datenbankoptimierer. – Todor

+0

Warum nicht, das Slug-Feld ist ein Index – erajuan

Antwort

1

Für die meisten Datenbanken, diese Abfrage ist genau das gleiche wie

select * from cms_page WHERE ("cms_page"."web_id" = '1' AND "cms_page"."slug" = '''some-slug''') 

Dieses

select * from cms_page WHERE ("cms_page"."slug" = '''some-slug''' and "cms_page"."web_id" = '1') 

Sie könnten versucht sein, Ihre Fragen zu umschreiben Arithmetik Operationen schneller zu machen, während die Lesbarkeit geopfert wird. Da MySQL ähnliche Optimierungen automatisch durchführt, können Sie diese Arbeit häufig umgehen, und die Abfrage in einer verständlicheren und wartbarer Form lassen. Einige der durchgeführten Optimierungen von MySQL folgen:

http://dev.mysql.com/doc/refman/5.7/en/where-optimizations.html

Nun mysql über die Verwendung von Indizes als postgresql nicht so heiß ist, also, wenn mysql tut, es postgresql tut es auch!

Wenn ein Index verfügbar ist, entscheidet der RDBMS-Abfrageparser, den Vergleich für die Spalten durchzuführen, die zuerst vom Index abgedeckt werden.

Verwandte Themen