这是我们ERP中的一个订单表,其中记录大概有800万条,所占磁盘空间是:2.45G。
字段如图:
所有的字段都带着索引,现在的问题是,我们操作这张表,就会变得异常的缓慢,有时就连一个很简单的主键搜索都会很慢。
索引如下:ERP服务器内存16G,CPU不知道什么CPU,反正很强大。服务器 w 查看负载,达到2时,大家操作就基本上慢死了,top 第一是 mysql。请问大家能给我一点意见让我优化一下目前的数据库么?谢谢!

解决方案 »

  1.   

    mysql的表用的什么引擎   mysiam innodb 如果是innodb  innodb_buffer_pool_size开了多少内存
      

  2.   

    有点想不通这个为何会这么慢,没加LIMIT的时候很快,加了LIMIT 5 就慢了。SELECT `orders_id` FROM `orders` WHERE orders_main_status = 5 AND orders_oversea_warehouse_id=2 AND r
    r_code = "0" ORDER BY orders_id ASC LIMIT 5另外:以下SQL本来很慢,运维又建立了一个复合索引,所以快了:
    SELECT orders_id, orders_original_id, orders_platform, orders_shop_name, orders_delivery_address, orders_total_us_price, orders_shipping_method, orders_shipping_method_actual, orders_timestamp_purchased, orders_print_status, orders_main_status, orders_has_track_number, orders_buyer_id, orders_delivery_addr_confirmed, orders_purchase_status, orders_date_import, orders_dispatched_times, orders_date_sold, orders_allow_2_split, packers_list, orders_in_mail_box, orders_oversea_warehouse_id
    FROM `orders` 
    WHERE orders_id >=13092407
    AND (
    (
    (
    orders_purchase_status =1
    OR orders_purchase_status =2
    )
    AND (
    orders_main_status <>8
    AND orders_main_status <>12
    AND orders_main_status <>13
    )
    )
    )
    AND (
    orders_purchase_status
    IN ( 2 )
    )
    AND (
    orders_platform = "EBAY"
    )
    ORDER BY orders_date_import ASC 
    LIMIT 0 , 60
      

  3.   


    key_buffer = 1024M
    max_allowed_packet = 32M
    table_cache = 4096
    sort_buffer_size = 4M
    read_buffer_size = 4M
    read_rnd_buffer_size = 4M
    join_buffer_size=4M
    myisam_sort_buffer_size = 16M
    thread_cache_size = 8
    query_cache_type=1
    query_cache_size = 512M
    query_cache_limit=16M
    thread_concurrency = 32
    default-time-zone=+8:00
    max_connections = 512
    skip-name-resolve
    #log-bin=mysql-bin
    expire_logs_days = 15
    #binlog_format=mixedlong_query_time = 1
    log-slow-queries = /var/log/slow.sql#并发写入
    concurrent_insert=2
      

  4.   

    这是我们的ERP订单表,订单时时刻刻变我没有足够的理论和数据支持来推翻运维的建立索引解决问题的做法。。
      

  5.   

    贴出以下检查内容以供分析。show index from orders;
    explain SELECT `orders_id` FROM `orders` WHERE orders_main_status = 5 AND orders_oversea_warehouse_id=2 AND r
    r_code = "0" ORDER BY orders_id ASC LIMIT 5;