sql >> データベース >  >> RDS >> Mysql

Djangoクエリ自然順

    私の知る限り、これに対する一般的なDjangoソリューションはありません。 id / question_codeルックアップ構造を構築することで、メモリ使用量を減らし、データベースクエリを制限できます

    from natsort import natsorted
    question_code_lookup = Question.objects.values('id','question_code')
    ordered_question_codes = natsorted(question_code_lookup, key=lambda i: i['question_code'])
    

    結果をページングしたい場合は、ordered_question_codesをスライスし、別のクエリを実行して、必要なすべての質問を取得し、そのスライス内の位置に従って並べ替えます。

    #get the first 20 questions
    ordered_question_codes = ordered_question_codes[:20]
    question_ids = [q['id'] for q in ordered_question_codes]
    questions = Question.objects.filter(id__in=question_ids)
    #put them back into question code order
    id_to_pos = dict(zip((question_ids), range(len(question_ids))))
    questions = sorted(questions, key = lambda x: id_to_pos[x.id])
    

    それでもルックアップ構造が大量のメモリを使用する場合、またはソートに時間がかかりすぎる場合は、より高度なものを考え出す必要があります。これは確かに巨大なデータセットにうまく拡張できません




    1. 存在する場合はUPDATE、それ以外の場合はSQLServer2008でINSERT

    2. mysql、ifnullとcoalesce、どちらが速いですか?

    3. EC2 Amazon Linux AMI MySQL CPU @ 62%アイドル時?

    4. XEvent Profilerを使用して、SQLServerでクエリをキャプチャします