MySql Query Speed ​​Confusion TUSSEN of veel indexquery's

Ik heb een situatie waarin ik een aantal rijen uit een tabel moet selecteren ....

De tabel is enigszins als volgt .......

        id           Name          Age

        0011         name1          45
        0012         name2          67
        .
        . 
        .
        .
        0020         name10         100
        .
        .
        .
        .


        //id is a primary key varchar(4).......
        //name is varchar.....
        //age is int.......

Het is nu mijn behoefte om waarden te krijgen binnen een bereik zoals 0011 - 0020 of 0020 - 0030 ..... Ik kan het begin en het einde van dit paricular bereik genereren waarvan ik wil dat je er niet aan denkt ......

Maar de twijfel die ik heb is

          Should I execute 10 SELECT queries based on the index values ?

voor bijvoorbeeld: -

           for(i=0;i<10;i++)
           {
                    //SQL Query to SELECT row WHERE id = '0011' LIMIT 0,1 
                   //next time it id to select would be '0012'
            }

OR

           Should I include a single Query to SELECT ROWS using AND, OR , BETWEEN..etc..with limit 10..???

Welke is sneller ... ???

Ik heb verwarring in het eerste geval, er is slechts één rij tegelijkertijd geselecteerd en zonder veel bewerkingen in elke zoekopdracht (waarbij 10 keer een verzoek is ingediend) is de slechterik ) en in het tweede geval waar alleen één query wordt gebruikt, maar ik geloof dat een overhead wordt verschaft op de varchar primaire sleutel met behulp van vergelijkingsoperatoren ........

2
Omdat ze allebei snel kunnen worden geïmplementeerd, moet je dit misschien doen en ze benchmarken om een ​​indicatie te krijgen?
toegevoegd de auteur Ben Swinburne, de bron

3 antwoord

De echte kosten zijn het ontleden en uitvoeren van meerdere query's versus het verkrijgen van meer gegevens dan u nu nodig heeft of nu nodig hebt.

Aangezien je op paginering lijkt te lijken, zoals bij het krijgen van tien tegelijk, zou je een pagina vol moeten maken tegelijk met een tussen.

Sometimes a query optimiser may do better with >= Start and <= End than between start and end, but other than that I can't see an issue, unless your table was extremely wide (lot's of data in one row)

1
toegevoegd
@akp. Yep paginering is een standaard, hoe complex het ook moet zijn, hangt af van uw gegevens (bijv. Kunt u er vóór invoegen), als u er een verwijdert op de pagina, wordt dit op de volgende pagina overgeslagen, enz. Maar het is allemaal een goed begrepen logica.
toegevoegd de auteur Tony Hopkinson, de bron
@akp U hebt zowel tussen en limiet nodig voor paginering.
toegevoegd de auteur Ravinder Reddy, de bron
@akp Ja. Gebruik tussen om records in een bereik te selecteren en gebruik limit voor paginering.
toegevoegd de auteur Ravinder Reddy, de bron
dus ik geloof dat je me aanmoedigt om de tweede situatie te gebruiken .....
toegevoegd de auteur Arjun K P, de bron
@Ravinder dus ik neem aan dat je ervoor kiest om de tweede voorwaarde te gebruiken met LIMIT-beperking ...
toegevoegd de auteur Arjun K P, de bron

Single Query is een snellere manier om gegevens van databasevergelijking met andere query op te halen met for-lus ze nemen zoveel tijd in beslag omdat elke query een eigen individuele uitvoeringstijd heeft nu tot welke kant je hebt gekozen

0
toegevoegd
Deze operators zijn niet verantwoordelijk voor langzamere @akp
toegevoegd de auteur Query Master, de bron
zie ik moet 10 rijen krijgen .. maar de verwarring die ik heb is zal het de vraagverrichting langzamer maken als ik de vergelijkingsoperators zoals > =, <= enz. gebruikte.
toegevoegd de auteur Arjun K P, de bron
ik bedoel, het is net zoiets als het selecteren van dingen met een bepaalde voorwaarde zal geen overhead zijn ..... sorry..als ik dom ben over deze vraag ...
toegevoegd de auteur Arjun K P, de bron

U kunt sql-query uitvoeren om de resultaten van een tabel SELECT COUNT (*) FROM terug te geven, bijvoorbeeld: 1000 En krijg het aantal pagina's $ pages = ceil (1000/10);

for ($i=0;$i<=$pages:$i++) {
$start=10*$i;
$sql="SELECT MIN(id), MAX(id) FROM TABLE WHERE LIMIT ".$start.",10";
}
0
toegevoegd