AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-22587

Cratylus's questions

Martin Hope
Cratylus
Asked: 2014-09-25 12:21:58 +0800 CST

Usando um índice para asc e desc em uma coluna de string

  • 4

Conheço um truque para fazer o pedido por consultas mais rápido quando queremos pedir por asc e desc.
Para inteiros, armazene um valor negado.
Portanto, se eu armazenar -7,-11,-8,-5,-1,-2a ordem por asc, -11, -8, -7, 5, -2, -1a linha real será classificada por essa coluna (se, por exemplo, eu mostrar a versão não negada).
Pergunta: Como eu uso este truque com strings?
Como uma string é "negada" ou invertida para que o truque funcione também para colunas de string?

Atualizar
o MySQL não pode usar um índice para uma consulta do tipo:
ORDER BY col1 ASC col2 DESC
Se a coluna que eu quero descer for um número inteiro posso armazenar o valor negado e fazer a consulta como:
ORDER BY col1 ASC col2 ASC
Nesse caso o índice pode ser usado e eu vou de fato obter o valor em ordem decrescente devido à negação -11, -8, -7, 5, -2, -1é crescente, mas se você remover a negação é decrescente.
Meu problema é que não estou claro como aplicar essa abordagem a uma coluna de string. Posso de alguma forma obter o valor aritmético da string?

mysql index
  • 1 respostas
  • 3157 Views
Martin Hope
Cratylus
Asked: 2014-09-15 10:31:47 +0800 CST

Como as tabelas derivadas são implementadas no MySQL

  • 0

Quando o MySQL cria uma tabela derivada como resultado de

SELECT (SELECT ...) etc
ou SELECT * FROM a JOIN (SELECT * from B) etc
ouSELECT * FROM (SELECT ...)

Essas tabelas temporárias derivadas são criadas na memória ou no sistema de arquivos? Depende do tamanho da tabela derivada?

mysql join
  • 2 respostas
  • 324 Views
Martin Hope
Cratylus
Asked: 2013-09-30 03:22:51 +0800 CST

Por que não consigo alterar os níveis de isolamento da minha conexão no MySQL?

  • 3

Estou tentando experimentar um pouco com o nível de isolamento do MySQL em um ambiente de teste.
eu faço o seguinte:

mysql> set @@session.tx_isolation='READ-UNCOMMITED';
ERROR 1231 (42000): Variable 'tx_isolation' can't be set to the value of 'READ-UNCOMMITED'

Isso também falha:

mysql> update information_schema.session_variables set variable_value='READ-UNCOMMITED' where variable_name='TX_ISOLATION';
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema' 

O que eu estou fazendo errado aqui? eu sou raiz. Portanto, não deve ser uma questão de direitos.

mysql transaction
  • 1 respostas
  • 8826 Views
Martin Hope
Cratylus
Asked: 2013-08-14 10:06:18 +0800 CST

Por que o MySQL ignora o índice mesmo em vigor para esta ordem?

  • 15

Eu corro um EXPLAIN:

mysql> explain select last_name from employees order by last_name;
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows  | Extra          |
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
|  1 | SIMPLE      | employees | ALL  | NULL          | NULL | NULL    | NULL | 10031 | Using filesort |
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
1 row in set (0.00 sec)  

Os índices da minha tabela:

mysql> show index from employees;  
+-----------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+  
| Table     | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |  
+-----------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+  
| employees |          0 | PRIMARY       |            1 | subsidiary_id | A         |           6 |     NULL | NULL   |      | BTREE      |         |               |  
| employees |          0 | PRIMARY       |            2 | employee_id   | A         |       10031 |     NULL | NULL   |      | BTREE      |         |               |  
| employees |          1 | idx_last_name |            1 | last_name     | A         |       10031 |      700 | NULL   |      | BTREE      |         |               |  
| employees |          1 | date_of_birth |            1 | date_of_birth | A         |       10031 |     NULL | NULL   | YES  | BTREE      |         |               |  
| employees |          1 | date_of_birth |            2 | subsidiary_id | A         |       10031 |     NULL | NULL   |      | BTREE      |         |               |  
+-----------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+  
5 rows in set (0.02 sec)  

Existe um índice em last_name mas o otimizador não o utiliza.
Então eu faço:

mysql> explain select last_name from employees force index(idx_last_name) order by last_name;  
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows  | Extra          |  
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
|  1 | SIMPLE      | employees | ALL  | NULL          | NULL | NULL    | NULL | 10031 | Using filesort |  
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
1 row in set (0.00 sec)  

Mas ainda assim o índice não é usado! O que eu estou fazendo errado aqui?
Tem a ver com o fato de o índice ser NON_UNIQUE? BTW o last_name éVARCHAR(1000)

Atualização solicitada por @RolandoMySQLDBA

mysql> SELECT COUNT(DISTINCT last_name) DistinctCount FROM employees;  
+---------------+  
| DistinctCount |  
+---------------+  
|         10000 |  
+---------------+  
1 row in set (0.05 sec)  


mysql> SELECT COUNT(1) FROM (SELECT COUNT(1) Count500,last_name FROM employees GROUP BY last_name HAVING COUNT(1) > 500) A;  
+----------+  
| COUNT(1) |  
+----------+  
|        0 |  
+----------+  
1 row in set (0.15 sec)  
mysql innodb
  • 3 respostas
  • 33726 Views
Martin Hope
Cratylus
Asked: 2013-08-14 09:51:24 +0800 CST

Por que as linhas de um EXPLAIN não são precisas?

  • 2

Eu tenho a seguinte tabela:

mysql> select count(*) from employees;  
+----------+  
| count(*) |  
+----------+  
|    10000 |  
+----------+  
1 row in set (0.03 sec)  

Eu faço um EXPLAIN: mysql> explique selecione last_name da ordem dos funcionários por last_name;

+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+  
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows | Extra          |
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+  
|  1 | SIMPLE      | employees | ALL  | NULL          | NULL | NULL    | NULL | 9894 | Using filesort |  
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+  
1 row in set (0.00 sec)

As linhas são 9894. Eu esperava 10000.
Eu faço:

mysql> analyze table employees;
+-------------------------------------+---------+----------+----------+  
| Table                               | Op      | Msg_type | Msg_text |  
+-------------------------------------+---------+----------+----------+  
| sql_dummy.employees | analyze | status   | OK       |  
+-------------------------------------+---------+----------+----------+  
1 row in set (0.04 sec)  

e execute novamente EXPLAIN:

mysql> explique selecionar last_name da ordem dos funcionários por last_name;

+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows  | Extra          |  
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
|  1 | SIMPLE      | employees | ALL  | NULL          | NULL | NULL    | NULL | 10031 | Using filesort |  
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
1 row in set (0.01 sec)  

As linhas agora são 10031.

Alguém sabe por que as linhas nunca são 10000? Também notei isso em outros casos.

mysql performance
  • 1 respostas
  • 726 Views
Martin Hope
Cratylus
Asked: 2013-04-16 11:51:07 +0800 CST

Ordenar por em uma coluna alfanumérica

  • 1

Tenho uma coluna que possui strings do seguinte tipo:
Miller 10
Allen 20
King 10
....
Jones 100

Eu tento classificar a coluna com base na parte numérica dos dados.
Eu tentei o seguinte:

SELECT * FROM the_table ORDER BY CAST(RIGHT(data,2) AS UNSIGNED);

Mas isso não funciona. Ele coloca Jones 100como a primeira entrada etc.

O que estou fazendo errado?

mysql select
  • 2 respostas
  • 62 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve