Uso de limite no Mysql: Quando usamos instruções de consulta, geralmente precisamos retornar as primeiras linhas de dados ou as do meio. O que devemos fazer neste momento? Não se preocupe, o mysql já nos fornece essa função.
SELECT * FROM tabela LIMIT [deslocamento,] linhas linhas OFFSET deslocamento
A cláusula LIMIT pode ser usada para forçar uma instrução SELECT a retornar um número especificado de registros. LIMIT aceita um ou dois argumentos numéricos. O parâmetro deve ser uma constante inteira. Se dois parâmetros forem fornecidos, o primeiro parâmetro especifica o deslocamento da primeira linha de registro retornada e o segundo parâmetro especifica o número máximo de linhas de registro retornadas. O deslocamento da linha de registro inicial é 0 (em vez de 1): Para compatibilidade com PostgreSQL, o MySQL também suporta a sintaxe: LIMIT # OFFSET #.
mysql> SELECT * FROM table LIMIT 5,10; // Recupera as linhas de registro 6-15;
//Para recuperar todas as linhas de registro de um determinado deslocamento até o final do conjunto de registros, você pode especificar -1 como o segundo parâmetro:
mysql> SELECT * FROM table LIMIT 95,-1; // Recupera a linha do registro 96-last.
//Se apenas um parâmetro for fornecido, significa retornar o número máximo de linhas de registro:
mysql> SELECT * FROM table LIMIT 5; //Recupera as 5 primeiras linhas do registro;
//Em outras palavras, LIMIT n é equivalente a LIMIT 0,n.
Observe a diferença entre o limite 10 e o limite 9,1:
Por exemplo:
1.
Selecione * Da ciclopédia Onde ID>=(
Selecione Máx.(ID) de (
Selecione ID da ciclopédia Ordenar por limite de ID 90001
)Como tmp
) limite 100;
2.
Selecione * Da ciclopédia Onde ID>=(
Selecione Máx.(ID) de (
Selecione ID da ciclopédia Ordenar por limite de ID 90000,1
)Como tmp
) limite 100;
Da mesma forma, se obtivermos os próximos 100 registros após 90.000, qual deles é mais rápido, a primeira frase ou a segunda frase?
A primeira frase é primeiro pegar os primeiros 90.001 registros, usar o maior valor de ID como identificador inicial e, em seguida, usá-lo para localizar rapidamente os próximos 100 registros. A segunda frase é pegar apenas os últimos 90.000 registros e, em seguida, pegar os próximos 100 registros. Valor do ID Use a marca inicial para localizar a primeira frase de 100 registros e executar o resultado em conjunto (0,23) segundos.
Resultado da execução da frase 2.100 linhas no conjunto (0,19) seg
Na verdade, a segunda frase pode ser simplificada para:
Selecione * Da ciclopédia Onde ID>=(
Selecione ID do limite da ciclopédia 90000,1
)limite 100;
Usar diretamente o ID do 90.000º registro sem passar pela operação Max. Isso deveria ser mais eficiente em teoria, mas no uso real o efeito é quase invisível, pois o ID de posicionamento retorna apenas 1 registro, e Max quase não precisa. ser executado. Você pode obter o resultado, mas escrevê-lo desta forma fica cada vez mais claro, eliminando a necessidade de desenhar uma cobra.
Selecione Top 100 * Da ciclopédia Onde ID>=(
Selecione Top 90001 Max(ID) de (
Selecione ID na ciclopédia Ordenar por ID
)Como tmp
)
Mas não importa se é implementado em um procedimento armazenado ou diretamente no código, o gargalo é sempre que o TOP do MS-SQL sempre retorna os primeiros N registros. Esta situação não é profundamente sentida quando a quantidade de dados não é grande, mas sim. existem centenas ou milhares de 10.000, a eficiência será definitivamente baixa. Em comparação, o limite do MySQL tem muitas vantagens.
,implementar:
Selecione ID do limite da ciclopédia 90000
Selecione ID do limite da ciclopédia 90000,1
Os resultados são:
90.000 linhas no conjunto (0,36) seg
1 linha no conjunto (0,06) seg
MS-SQL só pode usar Select Top 90000 ID da ciclopédia. O tempo de execução é de 390ms, e o tempo de execução da mesma operação não é tão bom quanto os 360ms do MySQL.
O deslocamento do limite é usado quando há mais registros. Quando há menos registros, o deslocamento é menor, por isso é melhor usar o limite diretamente. Quanto maior o deslocamento, melhor será o último.
/////////////////////////////////////////////// /// //////////////////////
1. Quando o deslocamento é relativamente pequeno.
selecione * do limite de yanxue8_visit 10,10
Execute várias vezes, o tempo permanece entre 0,0004-0,0005
Selecione * De yanxue8_visit Onde vid >=(
Selecione o vídeo de yanxue8_visit Ordenar por limite de vídeo 10,1
) limite 10
Execute várias vezes, o tempo permanece entre 0,0005-0,0006, principalmente 0,0006
Conclusão: Quando o deslocamento é pequeno, é melhor usar o limite diretamente. Esta exibição é devido à subconsulta.
2. Quando o deslocamento é grande.
selecione * do limite de yanxue8_visit 10000,10
Execute várias vezes, o tempo permanece em torno de 0,0187
Selecione * De yanxue8_visit Onde vid >=(
Selecione o vídeo de yanxue8_visit Ordenar por limite de vídeo 10000,1
) limite 10
Após múltiplas execuções, o tempo permanece em torno de 0,0061, que é apenas 1/3 do anterior. Quanto maior o deslocamento predefinido, melhor será o último.
/////////////////////////////////////////////// /// //////////////////////////////////////////// /
mysql> SELECT * FROM table LIMIT 95,-1; // Recupera a linha do registro 96-last.
//Se apenas um parâmetro for fornecido, significa retornar o número máximo de linhas de registro
Este artigo vem do blog CSDN. Por favor, indique a fonte ao reimprimir: http://blog.csdn.net/zhqingyun163/archive/2009/12/22/5053579.aspx.